【发布时间】:2025-11-28 00:25:01
【问题描述】:
我有一个客户端服务器情况,我使用
接收数据read(socket, char_buf, BUF_SIZE)
然后尝试使用
将其写入日志文件write(filefd, char_buf, strlen(char_buf))
奇怪的是这失败了(写返回-1),但错误号设置为0,我可以打印消息,并且日志文件描述符工作(我在这个命令之前和之后写入它)。
发生了什么事??
(在 Linux 内核 2.4 上工作(作业))
【问题讨论】:
-
确保某些库调用(由错误处理使用)不会覆盖 errno。尝试在 strace 下运行程序。
-
read() 返回什么?它是否按您的预期工作?当您执行
fprintf(stderr, "%s\n", strerror(errno));之类的操作时,您会看到什么? -
我相当肯定 read() 不适用于套接字,只能用于文件,但这不会影响写入。你能显示你处理错误的代码吗?
-
read() 应该在套接字上工作,但它不会让你传入标志或获取发件人的地址(用于数据报)。
-
@vput3833 它说文件描述符错误。我想这可以解决它。虽然我不知道是什么导致 errno 为零。我在同一台机器上运行服务器程序,它使用 pthreads。这会以某种方式弄乱 errno 吗?
标签: c networking linux-kernel