Chinaunix

标题: 问个关于creat的简单问题 [打印本页]

作者: semomo    时间: 2007-03-08 23:09
标题: 问个关于creat的简单问题
apue上的例子:

下面的代码用于演示文件空洞
  #include <sys/types.h>
  #include <sys/stat.h>
  #include <fcntl.h>
  #include "ourhdr"
  
char buffer1[]="abcdefghij";
  char buffer2[]="ABCDEFGHIJ";
  int main(void)
  {
    int fd;
    if((fd=creat("file.hole",FILE_MODE))<0)
     err_sys("creat error");
                                                                             
    if(write(fd,buffer1,10)!=10) //位移量现在是10
     err_sys("buffer1 write  error");
                                                                             
    if(lseek(fd,40,SEEK_SET)==-1) //位移量现在是40
     err_sys("lseek eror");
                                                                             
   if(write(fd,buffer2,10)!=10) //位移量现在是50,在位移量介于10和40之间的位统统置为0
     err_sys("buffer2 write  error");
                                                                   exit(0);
  }


creat后面的file_mode的定义是什么啊?
作者: rsuhkoi    时间: 2007-03-08 23:26
你看一下论坛的Linux 的C函数手册就知道了
作者: semomo    时间: 2007-03-08 23:35
弱弱的问:手册在哪儿啊?:(
作者: semomo    时间: 2007-03-08 23:39
file_mode是文件的制定的模式
但在那个程序中,并没有对file_mode本身做定义阿
作者: MMMIX    时间: 2007-03-09 00:25
原帖由 semomo 于 2007-3-8 23:39 发表于 4楼  
file_mode是文件的制定的模式
但在那个程序中,并没有对file_mode本身做定义阿


把 APUE2 附带的源码下载下来看下吧, FILE_MODE 是作者自己定义的一个宏,
就在那个 ourhdr.h (即附录 B.1)里面.

[ 本帖最后由 MMMIX 于 2007-3-9 00:28 编辑 ]
作者: semomo    时间: 2007-03-10 00:44
谢谢
昨天找了半天ourhdr.h,竟然没看见那一行。。。
作者: lcl-cgy    时间: 2007-03-10 10:19
应该是程序定义的宏,creat函数原型是这样的:
int fd=creat(char *filename, mode_t mode)
其中mode是4、2、1的组合,如:0755,0644等,其中4、2、1分别对应r、w、x。
作者: lcl-cgy    时间: 2007-03-10 10:20
另外,fd在程序退出是需要close
作者: langue    时间: 2007-03-10 10:47
It stand for the mode in which the file will be created. Refer to creat(2) for more info.
Note: creat(2) is obsolete, and please use open(2) with O_CREAT instead.
作者: feasword    时间: 2007-03-10 13:21
是在apue.h中定义的
#define FILE_MODE       (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)
作者: hiwoody    时间: 2007-03-10 20:49
提示: 作者被禁止或删除 内容自动屏蔽




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