再次学习linux编程open函数

一、open介绍


对于open函数的同名处理办法(个人理解为c语言的“多态”)。前一篇文章(C语言可变长参数实现“多态”)已经分析过了,下面是对open函数中的参数的一些详细解释。

回顾一下open函数的声明


二、参数详解


第一个参数pathname:要打开的文件位置


第二个参数flags:打开文件打方式


可取值:


O_RDONLY  只读的方式打开文件
O_WRONLY 只写的方式打开文件
O_RDWR 以 读写的方式打开文件
O_APPEND 追加的方式打开文件
O_CREAT    如果文件不存在,创建一个文件
O_EXEC      如果使用了O_CREAT而且文件已经存在,就会发生一个错误
O_NOBLOCK 以非阻塞的方式打开一个文件
O_TRUNC  如果文件已经存在,则删除文件的内容

注:O_RDONLY、O_WRONLY、O_RDWR只能一次使用一个。


第三个参数mode:如果要打开的文件不存在,则创建文件(第二个参数中包含了O_CREAT),给新文件赋予的操作权限


可取值:


文件所属用户权限:

S_IRUSR      读
S_IWUSR     写
S_IXUSR      执行
S_IRWXU     读、写、执行

文件所属组权限:

S_IRGRP     读
S_IWGRP    写
S_IXGRP     执行
S_IRWXG    读、写、执行

其它用户权限:

S_IROTH     读
S_IWOTH    写
S_IXOTH     执行
S_IRWXO    读、写、执行

额外权限:

S_ISUID 设置用户的执行ID
S_ISGID 设置组的执行ID

注:对于什么是用户执行ID和组执行ID,也就是文件的SUID和SGID,其实还有一个Sticky Bit(一般称为粘滞位),可以看我以前总结的一篇文章:再次学习linux文件特殊权限:SUID、SGID、Sticky Bit

除了使用以上的表示办法之外我们还可以用数字(umask值)来表示文件的操作权限(umask值为四位)

摘取参考文章的其中一段详细介绍了五位的文件权限表示

“Linux总共用5个数字来表示文件的各种权限:

第一位表示设置用户ID;

第二位表示设置组ID;

第三位表示用户自己的权限位;

第四位表示组的权限;

第五位表示其他人的权限。

每个数字可以取1(执行权限)、2(写权限)、4(读权限)、0(无)或者是这些值的和。

例如,要创建一个用户可读、可写、可执行,但是组没有权限,其他人可以读、可以执行的文件,并设置用户ID位。那么,我们应该使用的模式是1(设置用户ID)、0(不设置组 ID)、7(1+2+4,读、写、执行)、0(没有权限)、5(1+4,读、执行)即10705:

open("test", O_CREAT, 10705);

  上述语句等价于:

open("test", O_CREAT, S_IRWXU | S_IROTH | S_IXOTH | S_ISUID );

  如果文件打开成功,open函数会返回一个文件描述符,以后对该文件的所有操作就可以通过对这个文件描述符进行操作来实现。

OK,对于open函数的就到这里。需要深入的同学请移步至参考资料所列博文


三、参考资料


1、http://blog.csdn.net/xinyuwuxian/article/details/9284633

2、http://sharp2wing.iteye.com/blog/1280755

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章