当前位置: 首页 > 面试题库 >

写入前如何检查管道是否打开?

有耀
2023-03-14
问题内容

如果我在关闭的管道中写一条消息,则程序崩溃

if (write(pipe, msg, strlen(msg)) == -1) {
    printf("Error occured when trying to write to the pipe\n");
}

pipe在写之前如何检查它是否仍然打开?


问题答案:

正确的方法是测试的返回码,write然后还要检查errno

if (write(pipe, msg, strlen(msg)) == -1) {
    if (errno == EPIPE) {
        /* Closed pipe. */
    }
}

但是请稍等:写入封闭的管道不仅会返回-1 errno=EPIPE,而且还会发送一个SIGPIPE终止进程的信号:

EPIPE fd连接到读数端关闭的管道或插座。发生这种情况时,写入过程还将收到SIGPIPE信号。

因此,在进行测试之前,您还需要 忽略SIGPIPE

if (signal(SIGPIPE, SIG_IGN) == SIG_ERR)
    perror("signal");


 类似资料:
  • 假设我希望用户输入一个介于1和50之间的数字,那么我会: 但如果用户输入的数字不介于1和50之间,我希望它打印: 选择1到50之间的数字:无效数字 我该怎么做?

  • 问题内容: 我下面的代码创建一个新数组,并将其发送到chat(jFrame)。 但是我需要修改此代码以使其工作,如果打开了聊天jframe,则不要打开新的jFrame。而是在chat jframe中打开新的选项卡。聊天框的代码是: 问题答案: 我想知道如果该窗口依赖于另一个窗口,那么是否不应该使用JDialogs而不是JFrames。 一种解决方案是使用类字段来保存对窗口(JFrame或JDial

  • 我们使用的是Jenkins管道的艺术工厂插件,在这里定义:https://www.jfrog.com/confluence/display/RTF/Working在Jenkins中使用管道作业 是否有方法检查包是否已上载到Artifactory?

  • 问题内容: 目前,我正在该项目中执行例程之一来处理源目录中的文件。有一个Java进程正在查找指定的目录,并尝试读取和处理文件(如果存在)。文件很大,其他第三方进程会更新它们。问题是如何检查文件是否完全写入?我正在尝试使用,但看起来即使编写过程尚未完成,它也会返回实际大小。我觉得解决方案应该取决于平台。任何帮助,将不胜感激。 更新:这个问题与重复的问题没有什么实质性的区别,但是它的答案是工作代码片段

  • 问题内容: 我有一个简单的路线定义: 是唯一的选择吗?感觉很乱。 问题答案: 根据node.js的源代码 不返回任何内容。 如果出现问题,它将抛出一个对象。因此,您应该在一个块中编写。

  • 我找不到任何信息来检查YouTube频道是否真的在流式传输。使用Twitch,您只需要频道名称,使用API,您可以检查是否有直播。 我不想使用OAuth,通常一个公共API密钥就足够了。就像检查频道的视频一样,我想知道该频道是否正在流式传输。