一、文件IO与标准IO的区别:
标准IO :
遵循ANSIC标准 有缓冲区(标准错误stderr没有) 高级IO 通过流进行操作 适用于普通文件(.c/.h/.sh等)
文件IO:
遵循POSIX标准 无缓冲 低级IO 通过文件描述符进行操作 适用于特殊文件(设备文件)文件描述符:是一个非负整数,用于对文件的标识;
系统默认打开的文件描述符: 0 (标准输入stdin)、1 (标准输出stdout) 、2 (标准错误stderr)
二、 文件的打开:
open{
函数原型:
#include <sys/types.h> (头文件)
#include <sys/stat.h>
#include <fcntl.h>
int open(const char *pathname, int flags);
功能:打开一个已经存在的文件;
参数:
pathname:文件名(可以包含路径)
flags:文件的打开方式
O_RDONLY 只读
O_WRONLY 只写
O_RDWR 读写
返回值:打开成功返回一个文件描述符,失败返回-1,并设置错误号;
int open(const char *pathname, int flags, mode_t mode);
功能:如果文件存在就打开这个文件,不存在就创建并打开这个文件;
参数:
pathname:文件名(可以包含路径)
flags:文件的打开方式
O_RDONLY 只读
O_WRONLY 只写
O_RDWR 读写
O_CREAT 创建
O_TRUNC 清空
O_APPEND 以追加的方式打开文件
mode:存取权限
用八进制表示用户权限,同组用户权限,其他用户权限,eg:0777,0766
返回值:打开成功返回一个文件描述符,失败返回-1,并设置错误号;
三、文件的关闭:
close
文件描述符的个数是有限制的,文件使用完时应该对文件进行关闭操作;
linux下文件描述符的个数为1024个(系统默认打开了0,1,2);
#include <unistd.h> (头文件)
int close(int fd);
参数:
fd:文件描述符
返回值:成功返回0, 失败返回-1并设置错误号;
四、文件的读写:
read
函数原型:
#include <unistd.h> (头文件)ssize_t read(int fd, void *buf, size_t count);
功能:向一个打开的文件读取内容;
参数:
fd: 文件描述符;
buf: 用来存储读取数据的空间首地址
count:预计要读取的字节数;
返回值: 成功返回实际读到的字节数,读到文件末尾返回0, 失败返回-1并设置错误号;
write
函数原型:
#include <unistd.h>ssize_t write(int fd, const void *buf, size_t count);
功能:向一个打开的文件写入内容;
参数:
fd: 文件描述符;
buf: 用来存储待写入的数据的空间首地址
count:预计要写入的字节数;
返回值: 成功返回实际写入的字节数,失败返回-1,并设置错误号;
五、目录流:
打开目录
#include <sys/types.h>
#include <dirent.h>
DIR *opendir(const char *name);
功能:打开一个目录;
参数:目录名称
返回值: 成功返回一个目录流指针,失败返回NULL;读取目录
#include <dirent.h>struct dirent *readdir(DIR *dirp);
功能:读取目录里面的文件信息;
参数:
dirp:目录流
返回值:成功返回下一个目录项, 失败或者读到目录的末尾返回NULL并设置错误号;
目录流的关闭
#include <sys/types.h>
#include <dirent.h>int closedir(DIR *dirp);
返回值:成功返回0, 失败返回-1,并设置错误号;
六、修改文件权限:
int chmod(const char *pathname, mode_t mode);
参数:
pathname:文件名(可包含路径)
mode:修改后的权限
int fchmod(int fd, mode_t mode);fd:文件描述符
mode:修改后的权限
成功返回0, 失败返回-1并设置错误号;
七、格式输出:
printf();
fprintf():
int fprintf(FILE *stream, const char *format, ...);功能:向一个流格式输出
参数:
stream:输出流
format:地址表
sprintf():
int sprintf(char *str, const char *format, ...);
功能:格式输出到一个str指向的空间中;
sscanf();
int sscanf(const char *str, const char *format, ...);
功能:以某种格式从str指向的空间读取内容