1.查看父串中是否存在字串
函数原型:
#include <string.h>
char *strstr(const char *haystack, const char *needle);
由haystack所指向的字符串中,查看是否存在由neddle所指向的子串
函数参数:
haystack:父串指针
needle:字串指针
函数返回值:
char * :若子串存在于父串之中,则返回子串在父串中的起始指针
NULL : 父串中不存在子串
2.将格式化内容写(输出)到指定的字符串中
函数原型:
#include <stdio.h>
int sprintf(char *str, const char *format, …)
函数参数:
str :将要被写入的字符串指针
format :将要写入的字符串。例如:”123″;
… :由format参数决定。例如:sprintf(str,”123″); sprintf(str, “%s123”, “abc”);
函数返回值:
成功:写入的字符串长度,不包括’\0’。但是’\0’存在字符串的末尾。
失败:返回一个负数,代表没有写入成功
注意事项:
要确保str指向的字符从足够长,能够容纳将要写入的字符串
sprintf(str, “%s””123”, str); 第二个参数中可以连续出现””“”表示两个字符串。这个函数也可以实现字符串拼接的功能。
3.打开,遍历,关闭目录
#include <sys/types.h>
#include <dirent.h>
打开目录:
函数原型:
DIR *opendir(const char *name)
参数:
name :指向要打开的目录名。如果为空,函数返回空
返回值:
DIR *:成功打开目录,返回一个指向目录流的指针(目录流?)
NULL : 发生错误,返回NULL,且errno会被设置
注意事项:
可以简单的理解为:该函数成功返回表示成功打开了一个目录
遍历目录:
函数原型:
#include <dirent.h>
struct dirent *readdir(DIR *dirp);
函数参数:
dirp : opendir()的返回值,用来遍历dirp目录下的文件和目录
返回值:
struct dirent * :成功,返回一个指向结构体的指针,该结构体包含了目录或者文件的相关信息(名称,类型等)
NULL:遍历到最后一项,或者发生了错误。
注意事项:
该函数通常和while()语句一起使用:while( (dir=readdir ( dirp) ) )
关闭一个目录:
#include <sys/types.h>
#include <dirent.h>
函数原型:
int closedir(DIR *dirp);
参数:
dirp:opendir()的返回值,指定要关闭的目录。
返回值:
0:关闭目录成功
-1:出错,errno被设置
4.查看一个文件的相关信息(文件类型等信息)
函数原型:
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
int stat(const char *pathname, struct stat *statbuf);
函数参数:
pathname: 指向要查看的文件名
statbuf :结构体指针类型,该结构体用来存放相关的文件信息
返回值:
成功:0被返回
失败:-1被返回
注意事项:
使用该函数时,需要自己先定义一个结构体遍历:struct stat buf;
使用该函数时,不用打开文件。
struct stat 的部分内容{
mode_t st_mode;//记录了文件类型和权限
uid_t st_uid;//该文件所有者的用户id
}
可以使用以下宏判断文件的类型:
S_ISLNK (st_mode) 判断是否为符号连接 S_ISREG (st_mode) 是否为一般文件 S_ISDIR (st_mode) 是否为目录 S_ISCHR (st_mode) 是否为字符装置文件 S_ISBLK (s3e) 是否为先进先出 S_ISSOCK (st_mode) 是否为socket
5.查看用户的相关信息
函数原型:
#include <sys/types.h>
#include <pwd.h>
struct passwd *getpwuid(uid_t uid);
函数参数:
uid : 用户uid , 可以通过stat()函数获得
函数返回值:
struct passwd * :成功,返回一个指向用户信息(结构体)的指针
NULL: 发生错误,errno被设置
注意事项:
该函数使用时不用自己定义一个结构体变量,只需要定义一个指针用来接收getpwuid()函数的返回值。
6.打开文件
函数原型:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
函数参数:
pathname :指向了文件名
flags : 指定打开文件的方式
mode :指定文件的权限
函数返回值:
file descriptor : 成功,返回一个文件描述符
-1 :发生了错误
注意事项:
要指定第三个参数,需要在第二个参数中指定O_CREAT or O_TMPFILE,否则第三个参数会被忽略
必须包含以下一个flags: O_RDONLY, O_WRONLY, or O_RDWR
第一次被打开的文件,其文件描述符是:3
7.将文件映射到进程虚拟地址空间
函数原型
#include <sys/mman.h>
void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset);
函数参数
addr :映射到虚拟地址空间的起始地址,通常指定为NULL.
length : 文件的大小,以字节为单位,不足一页的会按一页计算
prot :期望的内存保护方式,不能和文件的打开方式冲突,以下选择之间可以或运算
flags :
MAP_PRIVATE:对内存的修改,不反映到其他进程和文件
MAP_ANONYMOUS:对内存的修改,不反映到文件
MAP_SHARED:对内存的修改,反映到其他进程和文件,提供了进程中共享内存的方法
fd:
有效的
文件描述词
。一般是由
open
()函数返回,其值也可以设置为-1,此时需要指定flags参数中的MAP_ANON,表明进行的是匿名映射。
offset :
一般设为0,表示从文件头开始映射
函数返回值:
void * :成功,被映射的虚拟地址空间的起始地址
MAP_FAILED (that is, (void *) -1) :失败,errno也会被设置。
注意事项:
详细的mmap()信息,可以参见:https://blog.csdn.net/u013525455/article/details/52582839 中系统调用部分。
8.解除文件和虚拟地址空间的映射
函数原型:
#include <sys/mman.h>
int munmap(void *addr, size_t length);
函数参数:
addr :mmap()的返回值
length :可以使用mmap()中的length值
函数返回值:
0:成功
-1:errno被设置
注意事项:
一般说来,进程在映射空间的对共享内容的改变并不直接写回到磁盘文件中,往往在调用munmap()后才执行该操作。可以通过调用msync()实现磁盘上文件内容与共享内存区的内容一致。
9. 关闭一个文件
函数原型:
#include <unistd.h>
int close(int fd);
函数参数:
fd : 表示要关闭的文件描述符
函数返回值:
0 :成功
-1:失败,errno被设置
10.改变或增加环境变量列表的值。
函数原型:
int setenv(const char *name, const char *value, int overwrite)
函数参数:
name:指向环境变量名
value:指向环境变量值
overwrite:
如果该环境变量原已有值:
如果overwrite不为0,而该环境变量原已有内容,则原内容会被改为参数value所指的变量内容。如果overwrite为0,且该环境变量已有内容,则参数value会被忽略。
函数返回值:
0:成功
-1:出错
11.从环境列表中获得一个环境变量
函数原型:
char *getenv(const char *name)
函数参数:
name:指向环境变量名
函数返回值:
char * :指向名为name的环境变量
NULL: 名为name的环境变量不存在
12.重定位文件描述符
函数原型:
#include <unistd.h>
int dup2(int fildes, int fildes2)
函数参数:
fides:源文件描述符
fildes2:目标文件描述符
函数成功返回时,右边的文件描述符会变成左边的一个副本,也就是说这两个文件描述父都代表了左边文件描述符
对应的文件。
函数返回值:
成功:返回一个新的文件描述符
失败:-1