免费注册 查看新帖 |

Chinaunix

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

关于文件的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-03-24 22:50 |只看该作者 |倒序浏览
刚入linux的门,今天写了第一个linux小程序就遇到了挫折

  1. #include <sys/types.h>
  2. #include <sys/stat.h>
  3. #include <fcntl.h>

  4. char buf[]="abcdefghij";
  5. int main(void)
  6. {
  7.   int fd;
  8.   if( fd = open("haha.abc", O_RDWR|O_CREAT|O_TRUNC, S_IRWXU|S_IRWXG|S_IRWXO)<0)
  9.      /*printf("create file error!");*/
  10.   if( write(fd, buf, 10) != 10)
  11.      /*printf("write file error!");*/
  12.   exit(0);
  13. }
复制代码

本意是创建一个haha.abc的文件,然后对它写一些东西.程序在X界面下的终端运行,结果haha.abc里面始终写不进东西,经过debug以后发现fd在open以后的值是0,是标准输入.请问为什么会出现这种情况?

[ 本帖最后由 mq110 于 2006-3-25 07:57 编辑 ]

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2006-03-25 07:59 |只看该作者
>>fd = open("haha.abc", O_RDWR|O_CREAT|O_TRUNC, S_IRWXU|S_IRWXG|S_IRWXO)<0

问题出在这句.

=优先级小于<的优先级.

改成(fd = open("haha.abc", O_RDWR|O_CREAT|O_TRUNC, S_IRWXU|S_IRWXG|S_IRWXO))<0
加个括号.

论坛徽章:
0
3 [报告]
发表于 2006-03-25 09:32 |只看该作者
表达式太长也容易出问题。。。

论坛徽章:
0
4 [报告]
发表于 2006-03-25 10:56 |只看该作者
噢!惭愧惭愧!光注意函数怎么写去了,最基本的东西没有主意到,就迷糊怎么文件在标准输入上打开了...
还有一个问题,我创建这个文件的时候mode参数是S_IRWXU|S_IRWXG|S_IRWXO,为什么在ls查看haha.abc的时候发现other还是没有写的权利?
ls -l haha.abc
-rwxrwxr-x  1 Joe Joe 10  3月 25 10:50 haha.abc
难道是因为这个帐号不是root而不能做到让其他用户也有写的权利?

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
5 [报告]
发表于 2006-03-25 12:22 |只看该作者
我从来不用S_IRWXO这样的宏.

记住4为r, 2为w,1为x 就行了.
你想让别人也能读写执行的话.
那么
open("haha.abc", O_RDWR|O_CREAT|O_TRUNC,0777)
就行了.

论坛徽章:
0
6 [报告]
发表于 2006-03-25 20:37 |只看该作者
刚试过,other 还是没有写权限?不知道怎么回事?

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
7 [报告]
发表于 2006-03-26 08:03 |只看该作者
原帖由 JoeFish 于 2006-3-25 20:37 发表
刚试过,other 还是没有写权限?不知道怎么回事?


如果还是没有写权限.说明你的umask不是0

umask(0);再创建试试

论坛徽章:
0
8 [报告]
发表于 2006-03-26 11:08 |只看该作者
奇怪也,刚刚看了一下umask的值
$umask
0000
是0,重新编译了一下,还是没有写权限

论坛徽章:
0
9 [报告]
发表于 2006-03-29 15:22 |只看该作者

试试

把haha.abc删除后再运行a.out,就可以了。试试吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP