open 是为了得到file descriptor(文件记述子)的system call。
open system call有2个或是3个参数。
第一参数是被opening的file的pass(路径)。
第二参数是表示open方法的flags(标识),有以下几种类型:
O_RDONLY file read only(读取专用)
O_WRONLY file write only(写入专用)
O_RDWR file read and write(读写两用)
O_CREAT 做成新的file
O_APPEND 追加到原有的file中
O_TRUNC truncate(删除)原有的file。和O_CREAT共用。
O_EXCL file存在的场合错误。和O_CREAT共用。
先指定flags中O_RDONLY,O_WRONLY,O_RDWR的任意一个,剩下的flags用|符号取论理和来决定。
第三参数是指定文件做成时的permission mode(许可模式)。比如说0777是谁都可以读写执行的文件,而0666是谁都可以读写的文件。这些看着是不大容易理解的数字,像下面一样每3bit区分开来就容易理解了。
0644=110 100 100 0666=110 110 110
rw- r-- r-- rw- rw- rw-
0755=111 101 101 0777=111 111 111
rwx r-x r-x rwx rwx rwx
程序例:
以下的sample1.c是第一参数指定文件大小,第二参数指定文件名,做成指定大小的文件的程序。
$ cc sample1.c
$ ./a.out 10000 zzz
size = 10000,fd = 3
$ ls -lg zzz
10 -rw-r--r-- 1 kix31117 J03A 10000 Jun 17 01:44 zzz
$
program list:
1 /* sample1.c*/
2
3 #include <stdio.h>
4 #include <fcntl.h>
5
6 #define BSIZE 512
7 char buf[BSIZE];
8
9 main(int argc,char **argv){
10 int fd,size;
11
12 if(argc != 3){
13 fprintf(stderr,"usage: %s size filename\n",argv[0]);
14 exit(1);
15 }
16
17 size = atoi(argv[1]);
18 fd = open(argv[2],O_WRONLY|O_CREAT|O_TRUNC,0644);
19
20 printf("size = %d,fd = %d\n",size,fd);
21
22 if(fd<0){
23 perror(argv[2]);
24 exit(1);
25 }
26
27 mkfile(fd,size);
28
29 close(fd);
30 exit(0);
31 }
32
33 mkfile(int fd,int size)
34 {
35 while(size>BSIZE){
36 write(fd,buf,BSIZE);
37 size -= BSIZE;
38 }
39
40 write(fd,buf,size);
41 }
(以上文章的版权在fastso,转载时请与本人取得联系,谢谢!)