C 命名管道写入内容生命周期

C 命名管道写入内容生命周期,c,pipe,C,Pipe,我在Linux下用C创建并编写了一个命名管道。写入其中的文本在命名管道中保存多长时间 根据我所做的,以及程序运行后管道文件的字节数,我认为程序结束后,文本不会保留在管道中。在中没有关于这方面的信息。我知道,普通管道在创建它们的过程关闭后会被破坏。但是命名管道呢,在程序完成后仍然在文件系统中 这是我用来创建命名管道并从中写入/读取的代码 #include <stdio.h> #include <unistd.h> #include <sys/types.h> #

我在Linux下用C创建并编写了一个命名管道。写入其中的文本在命名管道中保存多长时间

根据我所做的,以及程序运行后管道文件的字节数,我认为程序结束后,文本不会保留在管道中。在中没有关于这方面的信息。我知道,普通管道在创建它们的过程关闭后会被破坏。但是命名管道呢,在程序完成后仍然在文件系统中

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

#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;
}
#包括
#包括
#包括
#包括
#包括
#包括
int main(int argc,char*argv[]){
int FIOFILEDESCRIPTORID;
FIFOFileDescriptorID=mkfifo(argv[1],0660);
int ProccesID=fork();
如果(ProccesID==0){
int TempFileDescriptor=0;
char buffer[512]=“此处有一些随机文本…”;
TempFileDescriptor=open(argv[1],仅限O_);
写入(TempFileDescriptor,&buffer,sizeof(buffer));
关闭(临时文件描述符);
}否则{
int TempFileDescriptor=0;
字符缓冲区[512];
TempFileDescriptor=open(argv[1],仅限ordu);
读取(TempFileDescriptor,&buffer,sizeof(buffer));
关闭(临时文件描述符);
printf(“收到的字符串:%s\n”,缓冲区);
}
返回0;
}
在我运行这个程序并创建和使用管道进行写/读操作之后,我运行另一个程序–只是从给定管道读取文本。事实上,那里没有文本


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

查看维基百科:-命名管道在创建或使用它们的进程的生命周期之外仍然存在,除非它们被显式删除。

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

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

从linux手册中

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


下面是我为测试命名管道而编写的一些代码。我确保处理所有错误:


是的,我知道这一点,因为我可以在文件流中看到管道。我想知道他们是否保存了程序中写入的文本,或者没有。我无法打开管道,因为“我没有在LINUX下安装的应用程序”可以做到这一点。管道的大小是0字节,所以我很确定在程序结束后不会保存文本。-1并不能真正回答这个问题。最多应该是一个评论。