目录
1、open函数
2、close函数
3、read函数
4、write函数
5、案例(模拟CP)
1、open函数
所需头文件
#include
#include
#include
两种写法
int open(const char*pathname,int flags);
int open(const char*pathname,int flags,mode_t mode);
返回值:成功则返回文件描述符,否则返回-1
函数参数:
pathname:指向想要打开的文件路径名,或者文件名。我们需要注意的是,这个路径名是绝对路径名。文件名则是在当前路径下的。
flags:用来控制打开文件的模式
打开文件的方式,以下三种方式必须其一:
O_RDONLY:以只读方式打开文件
O_WRONLY:以只写方式打开文件
O_RDWR:以可读可写的方式打开文件
其余的,和上面的进行或运算:
O_CREAT:如果文件不存在,则创建文件,但同时必须使用第三个参数
O_EXCL:如果文件存在,则出错
O_NOCTTY: 使用本参数时,如文件为终端,那么终端不可以作为调用open()系统调用的那个进程的控制终端
O_TRUNC:如果文件存在,则清空文件中的内容
O_APPEND:文件存在,则追加在文件的末尾
mode:用来设置创建文件的权限(rwx),用一个八进制数表示。当flags中带有O_CREAT时,需要去创建一个新的文件,才需要去设置权限。
2、close函数
头文件:#include
int close(int fd);
参数:已打开的文件的文件描述符
返回值:成功返回0,失败返回-1
3、read函数
头文件:#include
ssize_t read(int fd, void *buf, size_t count);
功能:将从fd所描述的文件中的内容读出,并放入以buf地址开始的一片空间中,count是每次要读的字节数
参数1:文件描述符
参数2:读取到数据保存到buf中
参数3:要读的字节数
返回值:成功读取每次返回读到的字节数,返回0表示已经读完,失败返回-1
4、write函数
头文件:#include
ssize_t write(int fd, const void *buf, size_t count);
功能:将以buf地址开始的那片空间中的内容,写入到以fd描述的文件中去,每次写入count个字节数
参数1:文件描述符
参数2:要写入的数据存在的首地址
参数3:要写入的字节数(只要count设置的合适,用sizeof,可以一次写完)
返回值:成功返回写入的字节数count,失败返回-1
5、案例(模拟CP)
利用文件IO各函数进行两个文本之间的copy,模拟了虚拟机下的CP命令,此案例对学习文件IO各函数帮助很大,涵盖了各个函数,以下附上程序,读者可以参考学习
#include#include #include #include #include #include int main(int argc , char *argv[]) { //打开文件1,并进行打开成功与否的检测,文件1当是已经有数据存在了的,开的权限是可读 int fr = open(argv[1],O_RDONLY); if(fr < 0) { perror("open error"); return -1; } //打开文件2,检测,文件2是待赋值写入的空文本,所以开的权限是可写 int fw = open(argv[2],O_WRONLY); if(fw < 0) { perror("open error"); return -1; } //文件操作 char buf[1024] = {0}; while(1) { memset(buf,0,sizeof(buf)); //保险起见,每次清空一下 int n = read(fr,buf,sizeof(buf)); if(0 == n) { break; } else if(n == -1) { printf("read errorn"); } write(fw,buf,sizeof(buf)); } //关闭文件 close(fr); close(fw); return 0; }
说明:双向箭头表示等价调用,黄色箭头表示数据的流向,buf可以视为一个中间器,在读取出来的时候暂时存一下,之后又写入其他地方



