【问题标题】:Can creat function return zero and what's the meaning of it?creat 函数可以返回零,它的含义是什么?
【发布时间】:2018-11-10 03:36:47
【问题描述】:

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

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

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

【问题讨论】:

  • “Non-negative”包含0,所以有效。

标签: c linux


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-10
    • 2020-04-17
    • 2018-05-30
    • 1970-01-01
    相关资源
    最近更新 更多