在后台使用命名管道的程序无法正常关闭

时间:2016-06-30 16:22:01

标签: c bash pipe named-pipes named

我正在尝试使用命名管道(fifo)编写程序哪个部分是通信。当我在bash脚本中以无限循环(后台编写器)运行编写器和读取器程序时,某些时候编写器程序没有通过我收到错误结果而正确关闭。

我尝试在程序中使用一个简单的代码:

writer.c

#include <fcntl.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>

int main()
{
    int fd;
    char * myfifo = "/tmp/myfifo";

    /* create the FIFO (named pipe) */
    mkfifo(myfifo, 0666);

    /* write "Hi" to the FIFO */
    fd = open(myfifo, O_WRONLY);
    write(fd, "Hi", sizeof("Hi"));
    close(fd);

    /* remove the FIFO */
    unlink(myfifo);

    return 0;
}

reader.c

#include <fcntl.h>
#include <stdio.h>
#include <sys/stat.h>
#include <unistd.h>

#define MAX_BUF 1024

int main()
{
    int fd;
    char * myfifo = "/tmp/myfifo";
    char buf[MAX_BUF];

    /* open, read, and display the message from the FIFO */
    fd = open(myfifo, O_RDONLY);
    read(fd, buf, MAX_BUF);
    printf("Received: %s\n", buf);
    close(fd);

    return 0;
}

run.sh

#!/bin/bash

while true; do
    ./writer &
    ./reader
done

你能帮我正确地做这件事还是让你知道怎么做?

此致

0 个答案:

没有答案