QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 2303|回复: 22

用WRITE写文件,为什么文件字节为零?

[复制链接]
发表于 2005-9-26 13:38:10 | 显示全部楼层 |阅读模式
f=creat("a.txt",O_RDWD|O_CREAT)
write((f,"a",1)


文件A.TXT是空文件,为什么会这样啊.
发表于 2005-9-26 14:06:23 | 显示全部楼层
我这没问题。
回复

使用道具 举报

 楼主| 发表于 2005-9-26 16:08:53 | 显示全部楼层
不会吧.
打开文件A.TXT是空白的.
"a"没写在文件A.TXT.
回复

使用道具 举报

 楼主| 发表于 2005-9-26 18:40:43 | 显示全部楼层
# include "fcntl.h"
# include "sys/stat.h"

int  main()
{
    int f;
    char tt[]="abc";
    f=creat("a.txt,O_RDWR|O_CREAT);
    write(f,tt,3)
    return 0;
}

用CAT A.TXT 打开文件,字符串"abc"没被写入文件,为什么这样?
如果用到write(),函数creat()是否要设置第三个参数啊.
回复

使用道具 举报

发表于 2005-9-26 19:19:19 | 显示全部楼层
a.txt到底是大写还是小写?
回复

使用道具 举报

 楼主| 发表于 2005-9-26 19:51:31 | 显示全部楼层
cat a.txt
这样也不行,
不知那里错了
回复

使用道具 举报

 楼主| 发表于 2005-9-26 20:22:08 | 显示全部楼层
程序是在redhatlinux 9.0调试的.
回复

使用道具 举报

发表于 2005-9-27 09:21:05 | 显示全部楼层
写文件
char *a="a";
system(echo a >a.txt);

读文件
char *a;
a=system(cat a.txt);
回复

使用道具 举报

 楼主| 发表于 2005-9-27 09:36:47 | 显示全部楼层
答非所问
回复

使用道具 举报

发表于 2005-9-27 21:23:49 | 显示全部楼层
竟然说我答非所问

该是告诉你吧
1.写一个byte的东西打开文件要加 "O_BINARY"模式,不然莫认是O_ASCII模式写不进一个1byte的
2.1个byte的东西要write以后要调用fsync才能真正被写进去,不然会写在缓存
3.新创建的文件,create以后要调用fsync才能真正的被创建,否则系统不知道往哪里写东西
回复

使用道具 举报

发表于 2005-9-28 09:04:37 | 显示全部楼层
creat是不能指定打开模式的
它相当于open(... , O_CREAT|O_WRONLY|O_TRUNC, ...)
creat的第二个参数是文件的访问mask。
简单点
f=creat("a.txt",0666);

to  风雨纵横
fsync不是必须的,creat open write read对user application来说都是无缓存调用。
对write来说,不存在ascii或者binary的问题,它无论处理什么都是bianry。

最后,不要再使用creat调用,这个东西现在完全是因为兼容过去的source才保留的,
新写的程序都应该用open。
回复

使用道具 举报

 楼主| 发表于 2005-9-28 12:27:45 | 显示全部楼层
楼上两位:   
      open("a.txt",O_CREAT|O_RDWR|O_BINARY);
增加参数O_BINARY,用GCC调试为什么会有这样的错误?
   “O_BINARY“  undeclared (first use in this function)
  (each undeclared identifier is repor ted only once for each function if appearsin)
   
//===============================
int main()
{
int f;
char tt[]="abc";
f=open("a.txt,O_RDWR|O_CREAT|O_BINARY);
write(f,tt,3)
return 0;
}
回复

使用道具 举报

 楼主| 发表于 2005-9-28 13:36:09 | 显示全部楼层
如果程式改为以下
int main()
{
int f;
char tt[]="abc";
f=open("a.txt,O_RDWR|O_CREAT);
write(f,tt,3)
if (fsync(n))
   perror("fsync error")
return 0;
}

执行文件会出错:
fsync error:Invalid argument

文件还是零字节.
楼上两位,到底哪错了啊.
回复

使用道具 举报

发表于 2005-9-28 13:36:23 | 显示全部楼层
怎么我记得我写的程序里面用open和write以后要加上个close才行啊。
回复

使用道具 举报

 楼主| 发表于 2005-9-28 13:45:12 | 显示全部楼层
楼上:
     可以吗?怎么还不行呢?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-5 02:00 , Processed in 0.058791 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表