gpt4 book ai didi

c++ - 文件描述符的值什么时候变成 "-1"?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:28:23 24 4
gpt4 key购买 nike

我在 CPP 中有一个多线程程序,它有一个在整个代码中使用的日志记录功能。使用 fopen() 在主函数中打开日志文件,此日志记录函数将传递给日志记录函数的字符串写入其中。该函数还检查文件大小。如果它大于某个值,它会使用 fclose() 关闭文件并使用 fopen() 打开一个新文件。这里的问题是我一直在 valgrind 日志中看到这个错误“系统调用 write() 中的无效文件描述符 -1”。我想知道文件描述符的值变为-1 的可能原因是什么。我还在对打开的文件描述符进行任何操作的行上观察到“无效读/写”错误。这让我觉得可能是文件描述符的这个值导致了这个错误。任何提示将不胜感激。

最佳答案

查看打开的手册页

---摘自手册页------------

RETURN VALUE
open() and creat() return the new file descriptor, or -1 if an error occurred (in which case, errno is set appropriately).

很明显,您的代码没有检查文件描述符 (-1) 上的错误情况并继续读/写,因此您看到了错误。

编辑(解释 w.r.t fopen)

您打开的每个文件都与一个文件描述符相关联(无论您是否使用 fopen)。 Valgrind 正在跟踪您的系统调用跟踪(读/写)。 FILE* 只是文件描述符的包装器。因此,与“-1”fd 相关的错误语句仍然表明您正在读取/写入无效的文件(可能是您的进程耗尽了最大 fd 的分配)等。为了理解它,我建议进行系统调用使用“strace”跟踪您的过程。你会看到“fopen”(用户/图书馆级 api)在内部调用“open”(系统调用)。

希望对您有所帮助!

关于c++ - 文件描述符的值什么时候变成 "-1"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27055952/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com