我在Linux下创建并写入C中的命名管道.在那里写入的文本保存在命名管道中多长时间?
从我的工作,以及程序运行后的管道文件的字节,我想在程序结束后文本不会保留在管道中.在mkfifo手册中没有关于此的信息.我知道普通管道在创建它们的过程关闭后会被销毁.但是,在程序完成后仍然在文件系统中的命名管道呢?
这是我用来创建命名管道并从中写入/读取的代码.
#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;
}
Run Code Online (Sandbox Code Playgroud)
在我运行这个程序并创建并使用管道进行写入/读取之后,我再运行一个 - 只是从给定的管道中读取文本.的确,那里没有文字.
我会更好地检查这个东西,因为有一个很好的改变,在我启动程序之后再次删除/创建管道.
它不会保存任何东西. 当您向命名管道读取/写入内容时,除非某些其他进程从同一命名管道写入/读取,否则将阻止该进程.
该文件保留在文件系统中.但是当阅读/写作完成时,内容就会消失.
来自linux手册,
以这种方式创建FIFO特殊文件后,任何进程都可以打开它进行读取或写入,方式与普通文件相同.但是,必须先在两端打开,然后才能对其进行任何输入或输出操作. 打开FIFO以便正常读取块,直到某个其他进程打开相同的FIFO进行写入,反之亦然.