c语言 - 对同一文件描述符的顺序写入调用,但只有第二个崩溃?



我目前正在编写一个 C 程序,该程序正在将一些数据写入文件描述符,其中文件描述符表示已打开与程序连接的其他一些进程。

我的程序总是在某个点崩溃,我已经缩小了它最近采取的几个操作的范围,如下所示:

write(clientfd, "start", 5);
printf("something goes here");
write(clientfd, "end", 3);
printf("something else goes here");

写入是同一个文件描述符,并写入基本的字符串文字 - 但是,在这个程序的执行过程中,只有第一个writeprintf关闭 - 程序似乎在第二个write崩溃,因为第二个printf从未出现。

这对我来说似乎没有多大意义。我还打印了第一个write的输出(它实际写入的字节数),它似乎是正确的(在本例中为 5),这意味着第一个write调用甚至没有失败,但第二个导致程序由于某种神秘的原因崩溃。可能需要注意的是,对于此文件描述符连接,在连接的客户端,客户端已经关闭了文件描述符的末尾。我不确定这是否相关,但我觉得不是,因为第一个write成功了。

对于此文件描述符连接,在连接的客户端,客户端已经关闭了文件描述符的末尾。

在手册页中,我猜您收到以下错误之一:

  • EBADF fd 不是有效的文件描述符,或者无法打开写入。
  • EPIPE fd 连接到读取端关闭的管道或插座。 发生这种情况时,写入过程也将收到SIGPIPE信号。 (因此,仅当程序捕获、阻止或忽略此信号时,才会看到写入返回值。

我建议您检查返回值,如果出现错误,请确保使用perror()检查它。

出错时,返回 -1,并正确设置 errno。

最新更新