命名管道写内容生活

时间:2012-01-22 17:27:21

标签: c pipe

我在Linux下创建并写入C中的命名管道。在那里写入的文本保存在命名管道中的时间有多长?

从我的工作和程序运行后的管道文件的字节开始,我想在程序结束后文本没有保留在管道中。在mkfifo manual中没有关于此的信息。我知道普通管道在创建它们的过程关闭后会被销毁。但是,在程序完成后仍然在文件系统中的命名管道呢?

这是我用来创建命名管道并从中写入/读取的代码。

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

int main(int argc, char *argv[]) {
    int FIFOFileDescriptorID;
    FIFOFileDescriptorID = mkfifo(argv[1], 0660);

    int ProccesID = fork();
    if (ProccesID == 0) {
        int TempFileDescriptor = 0;
        char buffer[512] = "Some random text goes here...";

        TempFileDescriptor = open(argv[1], O_WRONLY);
        write(TempFileDescriptor, &buffer, sizeof(buffer));
        close(TempFileDescriptor);
    } else {
        int TempFileDescriptor = 0;
        char buffer[512];

        TempFileDescriptor = open(argv[1], O_RDONLY);
        read(TempFileDescriptor, &buffer, sizeof(buffer));
        close(TempFileDescriptor);
        printf("Received string: %s\n", buffer);
    }

    return 0;
}

运行此程序并创建并使用管道进行写入/读取后,我运行另一个 - 只是从给定管道读取文本。的确,那里没有文字。

我会更好地检查这个东西,因为有一个很好的改变,在我启动程序之后再次删除/创建管道。

3 个答案:

答案 0 :(得分:7)

它不会保存任何内容。当您向命名管道读取/写入内容时,除非某些其他进程从同一命名管道写入/读取,否则将阻止该进程。

该文件保留在文件系统中。但是当阅读/写作完成时,内容就会消失。

来自linux手册,

  

以这种方式创建FIFO特殊文件后,任何进程   可以像普通文件一样打开它进行读写。   但是,必须在可以之前同时打开两端   继续对其进行任何输入或输出操作打开FIFO   正常读取阻塞,直到某个其他进程打开相同的FIFO   写作,反之亦然。

答案 1 :(得分:1)

这是我编写的用于测试命名管道的一些代码。我确保处理所有错误:

cleanup in SIGPIPE

答案 2 :(得分:0)

查看Wikipedia:http://en.wikipedia.org/wiki/Named_pipe - 命名管道会在创建或使用它们的过程的生命周期之后持续存在,直到它们被明确删除。