免费注册 查看新帖 |

Chinaunix

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

linux文件读写问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-05-12 23:21 |只看该作者 |倒序浏览
我用LINUX系统调用来读写文件,如下面代码

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

int main(void)
{
        int fd;
        char psz[] = "Linux is good!";
        char buf[20] = {'\0'};
        int len;

        fd = open("a.txt", O_RDWR|O_CREAT, 0777);
        len = write(fd, psz, strlen(psz));

        len = read(fd, buf, sizeof(buf));
        buf[len] = '\0';
        close(fd);
        printf("buf: %s\n", buf);

        return 0;
}

该程序编译执行后,发现有两个问题
1、创建出来的文件权限不对,并没有777的权限,是
-rwxr-xr-x 1 root root     14 05-10 03:36 a.txt

2、在read会来的buf数据不对,根本就没有读回来数据,len返回值是0
怀疑是文件系统缓存问题,但是系统调用函数中,我没有找到象C函数
中fflush函数的功能

我用C函数来写,测试可以得到正确的结果。
简单的程序,没想到会冒出两个错误,两个问题该如何解决呢?

请高手指点,I am a Linux beginner

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
2 [报告]
发表于 2009-05-13 08:20 |只看该作者
原帖由 nanren0542 于 2009-5-12 23:21 发表
1、创建出来的文件权限不对,并没有777的权限,是
-rwxr-xr-x 1 root root     14 05-10 03:36 a.txt

看一下你的 umask 设置。
2、在read会来的buf数据不对,根本就没有读回来数据,len返回值是0

文件的 offset 不对,你要先 seek 到文件的开头,然后再读。

论坛徽章:
0
3 [报告]
发表于 2009-05-13 13:00 |只看该作者

回复 #2 MMMIX 的帖子

非常感谢MMMIX

1、我的 umask 是0022

2、正解,我在write和read之间加入lseek,结果正确

能否解释一下第一个问题,为何得到错误的结果?

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
4 [报告]
发表于 2009-05-13 14:19 |只看该作者
原帖由 nanren0542 于 2009-5-13 13:00 发表
非常感谢MMMIX

1、我的 umask 是0022

能否解释一下第一个问题,为何得到错误的结果?

那个结果是正确的。如果你不明白 umask 有什么作用,看看 umaks(2)。

论坛徽章:
0
5 [报告]
发表于 2009-05-13 14:56 |只看该作者
umask 是用来控制进程创建的文件权限的,如果你可以用一个进程序创建一个777的文件,安全性就没了

论坛徽章:
0
6 [报告]
发表于 2009-05-13 16:24 |只看该作者

回复 #4 MMMIX 的帖子

感谢大家,看了一篇忘上的文章,明白了umask的作用

论坛徽章:
0
7 [报告]
发表于 2009-05-17 02:10 |只看该作者
哈哈,我刚刚再论坛上发了求助帖也是这个read不到数据的问题,谢谢啦 看来要设置指针才可以解决问题,谢谢啦!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP