linux 下C语言文件读取问题

具体程序如下:#include<stdio.h>#include<stdlib.h>#include<sys/types.h>#include<sys/stat.h>#i... 具体程序如下:

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

int main()
{
char buf[]="abcdefghijklmnopqrstuvwxyz\n";
int fp,total,num;
toal=sizeof(buf);
if (fp=open("22.txt",O_WRONLY|O_CREAT|O_APPEND,0666)<0)
{
printf("file open fail");
exit(1);
}

while(num=write(fp,buf,sizeof(buf))!=total)
{
total=total-num;
}
close(fp);
}

程序运行时,只生成了目标文件,但是没有把数据写入文件,请问是神噩梦问题~~求指导
展开
 我来答
拥云庄主
2013-05-03 · TA获得超过2505个赞
知道小有建树答主
回答量:672
采纳率:100%
帮助的人:425万
展开全部

问题在于if判断:

if (fp=open("22.txt",O_WRONLY|O_CREAT|O_APPEND,0666)<0)

=优先级最低,所以,文件打开成功返回一个文件标识符,小于0不成立,所以,返回0,fp的值就是0,下面write写的时候写到0(标准输入)上面了,经过我测试,确实是写到屏幕上来了,有可能相当于键盘输入的,但是在VC下测试,不会输出到屏幕,所以,文件里面是空的。

修改如下:

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int main()
{
char buf[]="abcdefghijklmnopqrstuvwxyz\n";
int fp,total,num;
total=sizeof(buf);
printf("size =%d\n", total);
if ((fp=open("22.txt",O_WRONLY|O_CREAT|O_APPEND,0666))<0)
{
printf("file open fail");
exit(1);
}
while(num=write(fp,buf,sizeof(buf))!=total)
{
total=total-num;
}
close(fp);
}

运行截图:

usernamevalid
2013-05-03 · TA获得超过4417个赞
知道小有建树答主
回答量:2001
采纳率:71%
帮助的人:759万
展开全部
write没有定义buf的大小,你去看看write的第三个参数,不是结束条件,而是block size
追问
那应该怎么修改?
数据没有写入文件,而是输出在了屏幕上。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
dzb653374984
2013-05-03
知道答主
回答量:68
采纳率:0%
帮助的人:28.5万
展开全部
把toal=sizeof(buf)这句改成toal=strlen(buf)
sizeof(buf)和strlen(buf)算出来的不一样的..
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式