为了账号安全,请及时绑定邮箱和手机立即绑定

关于Linux C write函数的一些情况,麻烦解释一下哦!

关于Linux C write函数的一些情况,麻烦解释一下哦!

MMTTMM 2021-10-20 19:15:25
#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <unistd.h>#include <stdio.h>#include <string.h>#define FILENAME "/home/test.txt"#define FLAGS O_WRONLY | O_CREAT | O_TRUNC#define MODE 0666int main(void){char buf1[ ]={"abcdefghij"};char buf2[ ]={"1234567890"};int fd;int count;const char *pathname=FILENAME;if ((fd=open(pathname, FLAGS, MODE)==-1)){printf("error, open file failed!\n");exit(1);}count=strlen(buf1);if (write(fd, buf1, count)!=count){printf("error, write file failed!\n");exit(1);}if (lseek(fd, 50, SEEK_SET)==-1){printf("error, lseek failed!\n");exit(1);}count=strlen(buf2);if (write(fd, buf2, count) != count){printf("error, write file failed!\n");exit(1);}return 0;}/*gcc -o hole hole.c./holels /home/test.txtod -c /home/test.txt*/求指点:为什么/home/test.txt文件总是为0字节,内容并没有写到文件中
查看完整描述

2 回答

?
扬帆大鱼

TA贡献1799条经验 获得超9个赞

好隐蔽的一个错误!! if ((fd=open(pathname, FLAGS, MODE)==-1)) 这句,括号的位置错误了
应该是: if ( (fd=open(pathname, FLAGS, MODE))==-1)
原写法,导致fd值为0,成了标准输入(终端)了,所以,lseek就会一直报错!

查看完整回答
反对 回复 2021-10-24
?
智慧大石

TA贡献1946条经验 获得超3个赞

1.功能

将数据写入已打开的文件内
2.相关函数
open,read,fcntl,close,lseek,sync,fsync,fwrite
3.表头文件
#include<unistd.h>
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非有效的文件描述词,或该文件已关闭。



查看完整回答
反对 回复 2021-10-24
  • 2 回答
  • 0 关注
  • 404 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信