个人学习整理,如有不足之处,请不吝指教。转载请注明:@CSU-Max
系列博文:
Linux&Unix学习第二弹 -- exec 与 fock 系统调用
Linux&Unix学习第三弹 -- open/close/write/read系统调用
在 Unix/Linux 系统中,文件是一个很重要的概念,本文将介绍 Linux 中和文件相关的几个重要的系统调用--open-close-write-read 系统调用。
open系统调用
函数原型及解释
<span style="font-family:Courier New;font-size:18px;"><span style="font-family:Courier New;font-size:18px;">//open -- 打开或创建文件
int open (
const char *path, /*pathname*/
int flags, /*flags*/
mode_t perms /*permissions (when creating)*/
) ;</span></span>
调用 open可以打开一个已经存在的文件(普通文件、特殊文件或命名管道),或创建一个新文件,但它只能创建普通文件(创建特殊文件需要使用 mknod,命名管道使用 mkfifo)。open返回是打开已存在的文件或创建新文件的文件描述符。文件一旦打开,read、 write、 lseek、 close以及其他调用就可以使用其返回的文件描述符。
打开已存在文件
首先我们来看一下 open函数的三个参数,path是已经存在的文件的路径;至于 flags参数,若值为 O_RDONLY ,就以只读方式打开文件,若值为 O_WDONLY,就以只写方式打开文件,若值为 O_RDWR,就以读写方式打开文件;而对于一个已经存在的文件,参数 perms是没有用的,通常将其省略,因此此种情况下 open调用只需两个参数。
open失败的原因很多,常见的有如下两种:
1.没有相应的文件访问权限
2.路径所指向的文件不存在
创建新文件
前面已经说到,当文件不存在时,open会创建一个新文件(仅能是普通文件),我们只需要用 or操作向 open的 flags参数中加入标志 O_CREAT即可。这样可以创建一个新的只读文件,但是这没有任何意义,因为所创建的新文件没有任何可读内容。因此一般需要 O_CREAT与 O_WRONLY或 O_RDWR一起使用,此时就需要 perms参数了。
例如:
ec_neg1( fd = open(“/home/marc/newfile”,O_RDWR | O_CREAT, PERM_FILE) )