如何解决对同一文件描述符的顺序写调用,但仅第二次崩溃?
我目前正在编写一个C程序,该程序正在向文件描述符中写入一些数据,其中文件描述符代表打开了该程序连接的其他进程。
我的程序总是在某个时刻崩溃,并且我缩小了执行的最后几个动作的范围,类似于:
write(clientfd,"start",5);
printf("something goes here");
write(clientfd,"end",3);
printf("something else goes here");
写入相同的文件描述符,并写入基本的字符串文字-但是,在执行此程序的过程中,只有前write
和printf
消失了-程序似乎崩溃了在第二个write
处,因为第二个printf
从未出现。
这对我来说似乎没有多大意义。我还打印了第一个write
的输出(它实际写入的字节数),它看起来是正确的(在本例中为5),这意味着第一个write
调用甚至没有失败,但是第二个错误由于某种不可思议的原因导致程序崩溃。可能需要特别注意的是,对于此文件描述符连接,在客户端的连接端,客户端已经关闭了文件描述符的末尾。我不确定这是否有意义,但自从第一个write
成功以来,我就觉得那无关紧要。
任何帮助将不胜感激!
解决方法
对于此文件描述符连接,在连接的客户端上,客户端已经关闭了文件描述符的末端。
在手册页中,我猜您遇到以下错误之一:
- EBADF fd不是有效的文件描述符,或者未打开以进行写入。
- EPIPE fd连接到其读取端已关闭的管道或插座。发生这种情况时,写入过程还将收到SIGPIPE信号。 (因此,仅当程序捕获,阻止或忽略此信号时,才会看到写返回值。)
我建议您检查返回值,如果出错,请确保使用perror()
进行检查。
错误时,返回-1,并正确设置errno。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。