我在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;
}
运行此程序并创建并使用管道进行写入/读取后,我运行另一个 - 只是从给定管道读取文本。的确,那里没有文字。
我会更好地检查这个东西,因为有一个很好的改变,在我启动程序之后再次删除/创建管道。
答案 0 :(得分:7)
它不会保存任何内容。当您向命名管道读取/写入内容时,除非某些其他进程从同一命名管道写入/读取,否则将阻止该进程。
该文件保留在文件系统中。但是当阅读/写作完成时,内容就会消失。
来自linux手册,
以这种方式创建FIFO特殊文件后,任何进程 可以像普通文件一样打开它进行读写。 但是,必须在可以之前同时打开两端 继续对其进行任何输入或输出操作。 打开FIFO 正常读取阻塞,直到某个其他进程打开相同的FIFO 写作,反之亦然。
答案 1 :(得分:1)
这是我编写的用于测试命名管道的一些代码。我确保处理所有错误:
答案 2 :(得分:0)
查看Wikipedia:http://en.wikipedia.org/wiki/Named_pipe - 命名管道会在创建或使用它们的过程的生命周期之后持续存在,直到它们被明确删除。