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

标签 c crash file-descriptor write

我目前正在编写一个 C 程序,该程序正在将一些数据写入文件描述符,其中文件描述符表示已打开与该程序的连接的其他进程。
我的程序总是在某个时刻崩溃,我已经缩小了它所采取的最后几个 Action ,看起来像:

write(clientfd, "start", 5);
printf("something goes here");
write(clientfd, "end", 3);
printf("something else goes here");
写入相同的文件描述符,并写入基本的字符串文字 - 但是,在该程序的执行过程中,只有第一个 writeprintf go off - 程序似乎在第二个 write 处崩溃, 作为第二个 printf永远不会出现。
这对我来说似乎没有多大意义。我还打印了第一个 write 的输出(它实际写入的字节数),并且看起来是正确的(在本例中为 5),这意味着第一个 write call 甚至没有失败,但是第二个导致程序由于某种神秘的原因而崩溃。需要注意的是,对于这个文件描述符连接,在连接的客户端,客户端已经关闭了文件描述符的末端。我不确定这是否相关,但我觉得不是,因为第一个 write成功了。
任何帮助,将不胜感激!

最佳答案

for this file descriptor connection, on the client's side of the connection, the client has already closed their end of the file descriptor.


从手册页中,我猜您遇到了以下错误之一:
  • EBADF fd 不是有效的文件描述符或未打开以供写入。
  • EPIPE fd 连接到读取端关闭的管道或套接字。当这种情况发生时,写入过程也会收到一个 SIGPIPE 信号。 (因此,只有当程序捕获、阻塞或忽略此信号时,才会看到写入返回值。)

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

    On error, -1 is returned, and errno is set appropriately.

    关于c - 对同一文件描述符的顺序写入调用,但只有第二个崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63382877/

    相关文章:

    c - 文件描述符存储在进程内存中的什么位置?

    c - 内存指针和数组

    c - 套接字错误 1411

    c - C语法错误中的指针

    c++读取csv文件并操作数据然后打印错误

    javascript - Chrome 与 webworkers 和 createImageBitmap 崩溃

    捕获正在写入打开文件描述符的数据

    java - 闪屏后崩溃

    c++ - 如何读取 C++ 崩溃信息

    linux - 如何在 Linux shell 上关闭打开(已删除)的文件描述符