函数名 | 含义及用法 |
fopen | #include<stdio.h> FILE* fopen(const char* pathname,const char* mode);//文件名//模式 模式:rb(只读)rb+(读写)wb(只写,可创建)wb+(读写,可创建)ab(二进制只写)ab+(二进制读写) 返回文件流 |
fclose | #include<stdio.h> int fclose(FILE* stream);//文件流 返回 0 成功关闭文件,返回EOF关闭文件失败 |
fread | #include<stdio.h> size_t fread(void* ptr,size_t size, size_t nmemb,FILE* stream);//数组指针//单个元素的字节大小//读取元素个数//文件流 返回读取元素个数 |
fwrite | #include<stdio.h> size_t fread(void* ptr,size_t size, size_t nmemb,FILE* stream);//数组指针//单个元素的字节大小//写入元素个数//文件流 返回写入元素个数 |
fprintf | #include<stdio.h> int fprintf(FILE* stream,const char* format, ...);//文件流//const字符数组指针//变量 将格式化后的字符串写入到文件流stream中 |
fscanf | #include<stdio.h> int fscanf(FILE* stream,const char* format, ...);//文件流//const字符数组指针//变量 将文件流stream中的数据格式化赋值到指定变量 |
sprintf | #include<stdio.h> int sprintf(char* str,const char* format, ...);//字符数组指针//const字符数组指针//变量 将格式化后的字符串写入到字符串数组str中 |
sscanf | #include<stdio.h> int sscanf(const char* str,const char* format, ...);//const字符数组//const字符数组指针//变量 将const字符数组str中的数据格式化赋值到指定变量 |
fgetc | #include<stdio.h> int fgetc(FILE* stream);//文件流 一次从文件流中获取一个字符 |
fputc | #include<stdio.h> int fputc(int c,FILE* stream);//ASCII码字符//文件流 一个字符c输入到文件流中 |
fgets | #include<stdio.h> int fgets(char* s,int size,FILE* stream);//字符串//字符串长度//文件流 一次从文件流中获取一个长度为size的字符串 |
fputs | #include<stdio.h> int fputs(const char* s,FILE* stream);//const字符串//文件流 一个字符串s输入到文件流中 |
feof | include<stdio.h> int feof(FILE* stream);//文件流 若文件流传回空指针该函数返回非0,反之返回0 |
fseek | include<stdio.h> int fseek(FILE* stream,long offset,int whence);//文件流//偏移量//指定位置 whence可以是:SEEK_SET(文件开头),SEEK_CUR(文件当前位置),SEEK_END(文件末尾) 设置当前读写位置到离whence长度为offset的位置 |
ftell | include<stdio.h> long ftell(FILE* stream);//文件流 获取文件流当前的读写位置 |
rewind | include<stdio.h> void rewind(FILE* stream);//文件流 将文件流的读写位置移至文件开头 |
chmod | #include<sys/stat.h> int chmod(const char* path,mode_t mode);//文件名或路径//八进制整形表示文件权限 |
getcwd | #include<unistd.h> char* getcwd(char* buf,size_t size);//字符串指针//字符串长度 获取当前目录到buf |
chdir | #include<unistd.h> int chdir(const char* path);//目录名 将当前工作目录改变至path所指的目录 |
mkdir | #include<sys/stat.h> #include<sys/types.h> #include<unistd.h> int mkdir(const char* pathname,mode_t mode);//创建目录名//权限 创建一个目录 |
rmdir | #include<sys/stat.h> #include<sys/types.h> #include<unistd.h> int rmdir(const char* pathname);//目录名 删除目录 |
struct dirent | struct dirent { ino_t d_ino;//该文件的inode off_t d_off;//到下一个dirent的偏移量 unsigned short d_reclen;//文件名长度 unsigned char d_type;//所指的文件类型 char d_name[256];//文件名 }; 目录结构体 |
opendir | #include<sys/types.h> #include<dirent.h> DIR* opendir(const char* name);//目录名 打开一个目录 |
closedir | #include<sys/types.h> #include<dirent.h> int closedir(DIR* dir);//目录流 关闭目录文件 |
readdir | #include<sys/types.h> #include<dirent.h> struct dirent* readdir(DIR* dir);//目录流 读取目录的信息,并返回目录信息结构体指针 |
rewinddir | #include<sys/types.h> #include<dirent.h> void rewinddir(DIR* dir);//目录流 重新定位到目录文件的头部 |
seekdir | #include<sys/types.h> #include<dirent.h> void seek(DIR* dir,off_t offset);//目录流//指定位置 设置目录流当前的读取位置 |
telldir | #include<sys/types.h> #include<dirent.h> off_t telldir(DIR* dir);//目录流 返回目录流当前的读取位置 |
stat | #include<sys/types.h> #include<sys/stat.h> #include<unistd.h> int stat(const char* pathname,struct stat* buf);//文件名//文件状态结构体指针 获取文件状态 |
fstat | #include<sys/types.h> #include<sys/stat.h> #include<unistd.h> int fstat(int fd,struct stat* buf);//文件描述符//文件状态结构体指针 获取文件状态 |
struct stat | struct stat { #define st_atime st_atim.tv_sec//最后访问时间 }; |
open | #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);//文件名//打开方式//权限 打开方式和权限用掩码表示 打开或创建打开一个文件并返回该文件描述符 |
creat | #include<sys/types.h> #include<sys/stat.h> #include<fcntl.h> int creat(const char* pathname,mode_t mode);//文件名//权限 创建一个文件并返回文件描述符 |
read | #include<unistd.h> ssize_t read(int fd,void* buf,size_t count);//文件描述符//缓冲区//长度 |
write | #include<unistd.h> ssize_t write(int fd,const void* buf,size_t count);//文件描述符//缓冲区//长度 |
ftruncate | #include<unistd.h> int ftruncate(int fd,off_t length);//文件描述符//指定文件长度 将参数fd指定的文件大小改为参数length指定大小 |
mmap | #include<sys/mman.h> void* mmap(void* adr,size_t len,int prot,int flag,int fd,off_t off); //指定存储区的起始地址,设置为NULL,系统自动分配 //长度 //权限参数PROT_READ,PROT_WRITE表示可读可写 //MAP_SHARED //文件描述符 //偏移量,一般设为0 可以实现直接将一个磁盘文件映射到存储空间的一个缓冲区上面,无需使用read和write进行IO |
lseek | #include<sys/types.h> #include<unistd.h> off_t lseek(int fd,off_t offset,int whence);//文件描述符//偏移量//指定位置 whence可以是:SEEK_SET(文件开头),SEEK_CUR(文件当前位置),SEEK_END(文件末尾) 将文件指针设定到相对于whence偏移offset的位置返回读写点距离文件开始的长度 |
dup | #include<unistd.h> int dup(int oldfd);//文件描述符 复制文件描述符,并返回一个新的文件描述符,新文件描述符是旧的文件描述符的拷贝 |
dup2 | #include<unistd.h> int dup2(int oldfd,int newfd);//文件描述符//文件描述符 复制文件描述符,并返回一个新的文件描述符,新文件描述符是旧的文件描述符的拷贝 |
select | #include<sys/select.h> #include<sys/time.h> int select(int maxfd,fd_set* readset,fd_set* writeset,fd_set* exceptionset,struct timeval* timeout); //最大的文件描述符 //内核读操作的描述符字集合 //内核写操作的描述符字集合 //内核异常操作的描述符字集合 //等待描述符就绪需要多少时间,0代表不等待,NULL代表永久等待,检查描述字之后立即返回 |
集合的相关操作 | void FD_ZERO(fd_set* fdset);//将所有fd清零 void FD_SET(int fd,fd_set* fdset);//增加一个fd void FD_CLR(int fd,fd_set* fdset);//删除一个fd int FD_ISSET(int fd,fd_set* fdset);//判断一个fd是否有设置 |
掩码 | 含义 |
O_RDONLY | 以只读方式打开 |
O_WRONLY | 以只写方式打开 |
O_RDWR | 以读写方式打开 |
O_CREAT | 若文件不存在,则创建文件 |
O_EXCL | 仅与O_CREAT连用,若文件已存在,则open失败 |
O_TRUNC | 若文件存在,将文件长度截至0 |
O_APPEND | 以追加的方式打开,每次调用write时,文件指针自动移至文件末尾,用于多进程写进同一个文件的情况 |
O_NONBLOCK O_NDELAY | 对管道,设备文件和socket使用,以非阻塞方式打开文件,无论有无数据读取或等待,都会立即返回进程之中 |
O_SYNC | 同步打开文件,只有在数据被真正写入物理设备后才返回 |
O_ASYNC | 对管道,设备文件和socket使用,开启信号驱动IO,可读或可写发送信号 |
宏定义文件描述符 | 含义 |
STDIN_FILENO | 值为0,标准输入 |
STDOUT_FILENO | 值为1,标准输出 |
STDERR_FILENO | 值为2,标准错误输出 |