Linux C write函数

#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>#include<unistd.h>#include<... #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 0666
int 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
./hole
ls /home/test.txt
od -c /home/test.txt
*/

求指点:为什么/home/test.txt文件总是为0字节,内容并没有写到文件中
展开
 我来答
kaixingui2012
2018-03-11 · TA获得超过4.2万个赞
知道大有可为答主
回答量:1.4万
采纳率:81%
帮助的人:6333万
展开全部
好隐蔽的一个错误!! if ((fd=open(pathname, FLAGS, MODE)==-1)) 这句,括号的位置错误了
应该是: if ( (fd=open(pathname, FLAGS, MODE))==-1)
原写法,导致fd值为0,成了标准输入(终端)了,所以,lseek就会一直报错!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-05-15
展开全部
写完后一定要调用flush()函数,不然写的数据都丢在缓冲区了,没来地从缓冲区写到磁盘上 程序就结束了= =#
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
段凝佛rN
2018-03-11 · TA获得超过603个赞
知道小有建树答主
回答量:257
采纳率:0%
帮助的人:42.6万
展开全部
就是返回写入的字节数啊 ,你是说的写文件不
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
flyfit
推荐于2016-06-16 · TA获得超过458个赞
知道小有建树答主
回答量:595
采纳率:66%
帮助的人:295万
展开全部
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非有效的文件描述词,或该文件已关闭。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式