急求!linux的write如何实现不清空的覆盖写

急求!linux的write如何实现不清空的覆盖写,第1张

感觉这个问题和write没有什么关系,和文件打开方式有关系:

如果open文件给出O_APPEND标记,表示后续的写为追加写

如果给出 O_TRUNC 标记,表示一开始就将文件截断为0长度

如果没有给出上述标记,则写的结果就如你描述的那样

1.功能

将数据写入已打开的文件内

2.相关函数

open,read,fcntl,close,lseek,sync,fsync,fwrite

3.表头文件

#include

4.定义函数

ssize_t

write

(int

fd,const

void

*

buf,size_t

count)

5.函数说明

write()会把参数buf所指的内存写入count个字节到参数fd所指的文件内。当然,文件读写位置也会随之移动。

6.返回值

如果顺利write()会返回实际写入的字节数。当有错误发生时则返回-1,错误代码存入errno中。

7.错误代码

eintr

此调用被信号所中断。

eagain

当使用不可阻断i/o

时(o_nonblock),若无数据可读取则返回此值。

ebadf

参数fd非有效的文件描述词,或该文件已关闭。

好隐蔽的一个错误!! if ((fd=open(pathname, FLAGS, MODE)==-1)) 这句,括号的位置错误了

应该是: if ( (fd=open(pathname, FLAGS, MODE))==-1)

原写法,导致fd值为0,成了标准输入(终端)了,所以,lseek就会一直报错!


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8957697.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-23
下一篇 2023-04-23

发表评论

登录后才能评论

评论列表(0条)

保存