← 返回首页
Linux高级程序设计(十七)
发表时间:2021-11-08 00:01:32
open函数

open函数在Linux下一般用来打开或者创建一个文件,我们可以根据参数来定制我们需要的文件的属性和用户权限等各种参数。

1.open函数的定义和参数

#include <sys/types.h> //这里提供类型pid_t和size_t的定义
#include <sys/stat.h>
#include <fcntl.h>
//当文件存在时的定义方式 
int open(const char *pathname, int flags);
//当文件不存在时的定义方式
int open(const char *pathname, int flags, mode_t mode);

open函数的返回值如果操作成功,它将返回一个文件描述符,如果操作失败,它将返回-1。

参数含义:

pathname:在open函数中第一个参数pathname是指向想要打开的文件路径名,或者文件名。我们需要注意的是,这个路径名是绝对路径名。文件名则是在当前路径下的。

flags:flags参数表示打开文件所采用的操作,我们需要注意的是:必须指定以下三个常量的一种,且只允许指定一个。 - O_RDONLY:只读模式 - O_WRONLY:只写模式 - O_RDWR:可读可写

以下的常量是选用的,这些选项是用来和上面的必选项进行按位或起来作为flags参数。

以下三个常量同样是选用的,它们用于同步输入输出

mode:mode参数表示设置文件访问权限的初始值,和用户掩码umask有关,比如0644表示-rw-r–r–,也可以用S_IRUSR、S_IWUSR等宏定义按位或起来表示。要注意的是,有以下几点

2.实例

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

int main(int argc,char const *argv[]){
    int fd;
    fd = open("test.txt", O_RDONLY | O_CREAT, 0664);
    printf("fd=%d\n", fd);
    return 0;
}

测试运行:

fd=3

3.open常见错误

  1. 打开文件不存在
  2. 以写方式打开只读文件(权限问题)
  3. 以只写方式打开目录
  4. 当open出错时,程序会自动设置errno,可以通过strerror(errno)来查看报错数字的含义。

4.open函数与fopen函数区别

从来源来分,这两者很好区分:

  1. open函数是Unix下系统调用函数,操作成功返回的是文件描述符,操作失败返回的是-1,
  2. fopen是ANSIC标准中C语言库函数,所以在不同的系统中调用不同的内核的API,返回的是一个指向文件结构的指针。
  3. 同时open函数没有缓冲,fopen函数有缓冲,open函数一般和write配合使用,fopen函数一般和fwrite配合使用。