我目前正在使用Linux中的遗留代码并遇到一段代码,该代码在creat
标头中使用fcntl.h
函数来创建新文件或重写现有文件。此代码假定返回值低于零作为错误,高于零作为有效文件描述符,并且不考虑为零。
零是有效的文件描述符并且表示函数调用是否成功? Documentations说:
成功完成后,该函数将打开该文件并返回一个表示编号最小的未使用文件描述符的非负整数。否则,返回-1并设置errno以指示错误。
答案 0 :(得分:6)
是,零是有效的文件描述符。它通常是stdin,但如果您先close(0)
然后调用creat(...)
,内核将重新使用文件描述符编号0作为创建的文件。
如果您正在查看的代码没有考虑到这一点,那么可能是一个错误。即使你的可执行文件永远不会关闭fd 0本身,它也会在代码开始运行之前已经关闭文件描述符0的环境中失败。在bash shell中,您可以使用./myprogram 0<&-
触发此操作。