Chinaunix

标题: 关于文件的问题 [打印本页]

作者: JoeFish    时间: 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 编辑 ]
作者: mq110    时间: 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
加个括号.
作者: frost.wrath    时间: 2006-03-25 09:32
表达式太长也容易出问题。。。
作者: JoeFish    时间: 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而不能做到让其他用户也有写的权利?
作者: mq110    时间: 2006-03-25 12:22
我从来不用S_IRWXO这样的宏.

记住4为r, 2为w,1为x 就行了.
你想让别人也能读写执行的话.
那么
open("haha.abc", O_RDWR|O_CREAT|O_TRUNC,0777)
就行了.
作者: JoeFish    时间: 2006-03-25 20:37
刚试过,other 还是没有写权限?不知道怎么回事?
作者: mq110    时间: 2006-03-26 08:03
原帖由 JoeFish 于 2006-3-25 20:37 发表
刚试过,other 还是没有写权限?不知道怎么回事?


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

umask(0);再创建试试
作者: JoeFish    时间: 2006-03-26 11:08
奇怪也,刚刚看了一下umask的值
$umask
0000
是0,重新编译了一下,还是没有写权限
作者: jeromeecho    时间: 2006-03-29 15:22
标题: 试试
把haha.abc删除后再运行a.out,就可以了。试试吧。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2