Linux学习笔记 文件读写小细节

open 函数的flag

int open(const *pathname, int falg, int parm)

 O_RDONLY             //文件只读
 O_WRONLY             //文件只写
 O_CREAT              //不存在时创建文件(存在就直接清空后覆写)
 O_RDWR               //文件读写
 O_EXCL               //与O_CREAT共同作用,在试图覆写时报错
 O_TRUNC              //从文件头开始覆写
 O_APPEND             //在文件尾追加写入
  • open的第三个参数,只在O_CREAT存在下有用,用于控制其创建的权限(如 0777, 0666)
  • open的O_EXCL参数,与O_CREAT共同作用,再其文件存在时直接报错,防止文件被清空
  • 上述错误可以结合errno.h的库 通过perror()打印错误

lseek()函数

off_t lseek(int fd, off_t offset, int whence)
  • whence为当前文件指针的基点
  • SEEK_SET
  • SEEK_CUR
  • SEEK_END
  • 返回值是实际指针偏移的值
  • len = lseek(fd, 0, SEEK_END)
    可以返回文件的长度

lseek也可以制作空洞文件
即中间通过指针的移动,跳过一段,即制造了文件空洞
(用于多线程的文件写,想想迅雷,差不多的)

当文件被同一进程打开两次的时候

得到两个fd的值,就会有两个文件的指针,
当对文件进行读写时,两个指针从头开始写,两个写入的内容会相互覆盖,同样的,读取的文件会重复,
这时,给出其open()同时加入O_APPEND参数,这样就可以同步读写了

fd1 = open(FILEPATH, O_RDWR | O_APPEND)
fd2 = open(FILEPATH, O_RDWR | O_APPEND)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值