写和读命名管道

Posted

技术标签:

【中文标题】写和读命名管道【英文标题】:Writing and reading named pipes 【发布时间】:2020-11-20 11:31:46 【问题描述】:

我想从管道中读写。我用 C 编写了一个代码,它编译成功,但是当我通过 ./write 运行它时,它有运行时错误。这是我的读写代码。

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

int main(void) 
    int fd, retval;
    char buffer[] = "TESTDATAAA";
    
    fflush(stdin);
    retval = mkfifo("/temp/myfifo",0666);
    fd = open("/temp/myfifo",O_WRONLY);
    write(fd,buffer,sizeof(buffer));
    close(fd);
    return 0;

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

int main() 
    int fd, retval;
    char buffer[] = "TESTDATA";
    
    fd = open("/temp/myfifo",O_RDONLY);
    retval = read(fd, buffer, sizeof(buffer));
    fflush(stdin);
    write(1, buffer, sizeof(buffer));
    printf("\n");   
    close(fd);
    return 0;

任何帮助将不胜感激。

【问题讨论】:

(你的解码器就是1 &lt;&lt; n 【参考方案1】:

“什么都不做”与“有运行时错误”有很大不同。如果您运行 ./write 并且程序阻塞,这是预期的行为。 fopen 在其他进程打开 fifo 进行读取之前不会返回。

打开第二个终端并在生产者运行时执行您的消费者。

【讨论】:

以上是关于写和读命名管道的主要内容,如果未能解决你的问题,请参考以下文章

Linux进程间通信

Linux - 进程间通信 - 命名管道

windows命名管道

命名管道 232 管道正在关闭

windows命名管道

c++下使用命名管道实现进程间通信