当前位置:嗨网首页>书籍在线阅读

06-open()函数的错误

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

4.3.2 open()函数的错误

若打开文件时发生错误,open()将返回−1,错误号errno标识错误原因。以下是一些可能发生的错误(除了在上节参数描述中已经提及的错误之外)。

EACCES

文件权限不允许调用进程以flags参数指定的方式打开文件。无法访问文件,其可能的原因有目录权限的限制、文件不存在并且也无法创建该文件。

EISDIR

所指定的文件属于目录,而调用者企图打开该文件进行写操作。不允许这种用法。(另一方面,在某些场合中,打开目录进行读操作是必要的。18.11节将举例说明。)

EMFILE

进程已打开的文件描述符数量达到了进程资源限制所设定的上限(在36.3节将描述RLIMIT_NOFILE参数)。

ENFILE

文件打开数量已经达到系统允许的上限。

ENOENT

要么文件不存在且未指定O_CREAT标志,要么指定了 O_CREAT标志,但pathname参数所指定路径的目录之一不存在,或者pathname参数为符号链接,而该链接指向的文件不存在(空链接)。

EROFS

所指定的文件隶属于只读文件系统,而调用者企图以写方式打开文件。

ETXTBSY

所指定的文件为可执行文件(程序),且正在运行。系统不允许修改正在运行的程序(比如以写方式打开文件)。(必须首先终止程序运行,然后方可修改可执行文件。)

后续在描述其他系统调用或库函数时,一般不会再以上述方式展现可能发生的一系列错误。(每个系统调用或库函数的错误列表可从相关操作手册中查询获得。)采用上述方式原因有二,一是因为open()是本书详细描述的首个系统调用,而上述列表表明任一原因都有可能导致系统调用或库函数的调用失败。二是open()调用失败的具体原因列表本身就颇为值得玩味,它展示了影响文件访问的若干因素,以及访问文件时系统所执行的一系列检查。(上述错误列表并不完整,更多open()调用失败的错误原因请查看open(2)的操作手册。)