免费注册 查看新帖 |

Chinaunix

广告
  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2041 | 回复: 7
打印 上一主题 下一主题

[C] 一个在Linux写文档的简单问题 (已解决) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-07-06 02:05 |只看该作者 |倒序浏览
在Linux上写了一个很简单的文档写入及读取的小程式,可以写入,但是却无法读取。
编译没有问题,也可以正常执行,但是所产生的文档属性却是

---------- 1 ken ken   11 2009-07-06 02:04 test.txt

虽然知道应该是umask的问题,但还是不清楚要如何解决,请协助是那里出了问题

int main()      {
        int fd;
        int size;
        char s[] = "Test 123!\n";
        char buffer[80];

        fd = open("test.txt", O_WRONLY|O_CREAT);
        write(fd, s, sizeof(s));
        close(fd);

        fd = open("test.txt", O_RDONLY);
        size = read(fd, buffer, sizeof(buffer));
        close(fd);

        printf("%s", buffer);

        return 0;
}

------------------------------------------------------
感谢版主的提示,在参考 《UNIX环境高级编程》4.5时发现,如果是 create 新的文档时,就必须给第三个参数 st_mode
更改为
fd = open("test.txt", O_WRONLY|O_CREAT, S_IRSER|S_IWUSR); 后,所产生的文档属性就变成
-rw------- 1 ken ken   11 2009-07-06 12:31 test.txt
读取成功

[ 本帖最后由 uniken 于 2009-7-6 12:39 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2009-07-06 06:00 |只看该作者
关于umask,建议重新读一遍《UNIX环境高级编程》4.5。

但是你这段代码的问题在这里:

  1. fd = open("test.txt", O_WRONLY|O_CREAT);
  2. ...

  3. fd = open("text.txt", O_RDONLY);
  4. size = read(fd, buffer, sizeof(buffer));

复制代码


你看看你读的时候和写的时候文件是同一个吗?

说实话,我很无语........

论坛徽章:
0
3 [报告]
发表于 2009-07-06 08:39 |只看该作者
谢谢您的回复,但是我无法理解,写入与读取的文档为同一个,有什么问题?
开启一个新文档,写入之后关闭,然后打开读取,之后关闭,正常的程序不是这样做的?

论坛徽章:
0
4 [报告]
发表于 2009-07-06 09:04 |只看该作者

回复 #3 uniken 的帖子

你再仔细看看你代码里面的两个文件名。。。
写错了

论坛徽章:
0
5 [报告]
发表于 2009-07-06 09:06 |只看该作者
原帖由 uniken 于 2009-7-6 02:05 发表
在Linux上写了一个很简单的文档写入及读取的小程式,可以写入,但是却无法读取。
编译没有问题,也可以正常执行,但是所产生的文档属性却是

---------- 1 ken ken   11 2009-07-06 02:04 test.txt

虽然知道应该是umask的问题,但还是不清楚要如何解决,请协助是那里出了问题

int main()      {
        int fd;
        int size;
        char s[] = "Test 123!\n";
        char buffer[80];

        fd = open("test.txt", O_WRONLY|O_CREAT);
        write(fd, s, sizeof(s));
        sync();
        close(fd);

        fd = open("text.txt", O_RDONLY);
        size = read(fd, buffer, sizeof(buffer));
        close(fd);

        printf("%s", buffer);

        return 0;
}
虽然知 ...


LZ看到什么不同了吗?

论坛徽章:
0
6 [报告]
发表于 2009-07-06 09:11 |只看该作者
个个做测试的好料~~~~

论坛徽章:
0
7 [报告]
发表于 2009-07-06 09:20 |只看该作者

回复 #1 uniken 的帖子

除那个小问题外很好的程序了

论坛徽章:
0
8 [报告]
发表于 2009-07-06 09:39 |只看该作者
原帖由 uniken 于 2009-7-6 02:05 发表
在Linux上写了一个很简单的文档写入及读取的小程式,可以写入,但是却无法读取。
编译没有问题,也可以正常执行,但是所产生的文档属性却是

---------- 1 ken ken   11 2009-07-06 02:04 test.txt

虽然知 ...



sync();
及 test.txt/ text.txt 是在无法等到正确执行结果,重复修改程序所遗留下来的,抱歉造成您的误解!

问题的原因还是在开启写入文档后,文档属性的问题(---------- 1 ken ken   11 2009-07-06 02:04 test.txt),造成无法读取。

(曾经用chmod修改文件属性为 -rw-------, 并且把 read部分另外用编译后读取,这样就正常)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP