Chinaunix
标题:
关于文件的问题
[打印本页]
作者:
JoeFish
时间:
2006-03-24 22:50
标题:
关于文件的问题
刚入linux的门,今天写了第一个linux小程序就遇到了挫折
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
char buf[]="abcdefghij";
int main(void)
{
int fd;
if( fd = open("haha.abc", O_RDWR|O_CREAT|O_TRUNC, S_IRWXU|S_IRWXG|S_IRWXO)<0)
/*printf("create file error!");*/
if( write(fd, buf, 10) != 10)
/*printf("write file error!");*/
exit(0);
}
复制代码
本意是创建一个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