首页 > 解决方案 > creat 函数可以返回零,它的含义是什么?

问题描述

我目前正在使用 Linux 中的遗留代码,并遇到一段代码,该代码使用标头中的creat函数fcntl.h来创建新文件或重写现有文件。此代码假定返回值低于零作为错误,高于零作为有效文件描述符,并且不考虑零。

零是一个有效的文件描述符并指示一个成功的函数调用吗?文件说:

成功完成后,该函数应打开文件并返回一个非负整数,表示编号最小的未使用文件描述符。否则,应返回 -1 并设置 errno 以指示错误。

标签: clinux

解决方案


是的,零是一个有效的文件描述符。它通常是标准输入,但如果您先close(0)调用creat(...),内核将为创建的文件重用文件描述符编号 0。

如果您正在查看的代码没有考虑到这一点,则可能是一个错误。即使您的可执行文件本身从不关闭 fd 0,它也会在您的代码开始运行之前文件描述符 0 已经关闭的环境中失败。在 bash shell 中,您可以使用./myprogram 0<&-.


推荐阅读