对文件的操作,究根结底也就是那么几种行为,分别为打开,读,写,关闭。
一、文件描述符:至于什么是文件描述符,这个是很简单的概念。
二、打开文件
open(path,flag,…)
1、创建新文件
open(path,O_CREAT,filemode)
当创建一个新文件的时候,可以使用 O_CREAT 和 O_EXCL 组合,这样可以保证新文件一定是由当前进程创建。
2、O_APPEND标识
这是一个
文件状态标识
,对该文件的所有写操作之前都会讲文件指针移动到文件的末尾,这样就相当于追加写。这是一个原子操作。
三、读文件
read(fd,buf,len):从fd代表的文件读取 len 长度的字节内容,内容保存到 buf 缓冲区中。
四、写文件
write(fd,buf,len):将buf缓冲区中的内容写到fd指向的文件,长度为len
五、关闭文件
close(fd);
进程结束之后,OS会自动关闭所有打开的文件描述符,但是最好自己主动关闭,因为文件描述符是一种资源,如果打开的数量太多,可能造成后续的open操作失败。
六、设置文件的偏移量
lseek(fd,offset,whence)
如果执行成功则返回此时的文件偏移量,如果失败,则返回 -1,所以可以利用这个函数来判断一个文件是否可以设置偏移量。例如管道就不可以设置偏移量。
七、原子定位并读写
pread(fd,buf,nbytes,offset)
pwrite(fd,buf,nbytes,offset)
-
offset:
表示从哪个位置开始读取或者写入数据。偏移量是从文件开头开始计算
pread和pwrite函数是linux提供的另一种读写文件的函数,pread()相当于顺序调用了 lseek() 和 read() 函数。pwrite也类似。但是这个过程是原子的,即调用 lseek()和 read/write 的过程是原子的。
八、文件描述符操作
dup(fd)
dup2(fd,fd2)
这两个函数可以复制一个文件描述符,但是返回的新的文件描述符中的 O_CLOEXEC标识都会被清除。
fcntl()这个函数可以对文件描述符的一些属性进行设置。因为有的时候我们只能拿到文件描述符,所以只能通过这个函数对文件描述符进行设置或者获取一些文件的信息。比如管道,我们就只知道他们的文件描
版权声明:本文为ZXYAOZX原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。