c - creat 函数可以返回零,它的含义是什么?
问题描述
我目前正在使用 Linux 中的遗留代码,并遇到一段代码,该代码使用标头中的creat
函数fcntl.h
来创建新文件或重写现有文件。此代码假定返回值低于零作为错误,高于零作为有效文件描述符,并且不考虑零。
零是一个有效的文件描述符并指示一个成功的函数调用吗?文件说:
成功完成后,该函数应打开文件并返回一个非负整数,表示编号最小的未使用文件描述符。否则,应返回 -1 并设置 errno 以指示错误。
解决方案
是的,零是一个有效的文件描述符。它通常是标准输入,但如果您先close(0)
调用creat(...)
,内核将为创建的文件重用文件描述符编号 0。
如果您正在查看的代码没有考虑到这一点,则可能是一个错误。即使您的可执行文件本身从不关闭 fd 0,它也会在您的代码开始运行之前文件描述符 0 已经关闭的环境中失败。在 bash shell 中,您可以使用./myprogram 0<&-
.
推荐阅读
- react-native - Datepicker 的占位符在本机反应中随所选日期而变化,我想让占位符保持不变,而不是改变
- javascript - 如何使用 puppeteer API 处理 iframe
- javascript - 在Javascript中检查未定义的更好方法是什么?
- javascript - 如何在 Angular 中按服务器分组
- jmeter - JMETER:- 如果所有文件列名相同,如何处理多个 CSV 文件
- c++ - 如何在向量中的某个数字之后重新计算进程
- git - git store 如何解决合并后的冲突及其作者历史
- powershell - 在注册表和 gpedit.msc 中启用长文件路径不起作用
- ios - AVSpeechSynthesizer 声音不变
- python - Elasticsearch spark,如何更新时间戳