参考 (129条消息) linux c 使用fifo管道进行多线程间通信_土豆西瓜大芝麻的博客-CSDN博客_多线程fifo
稍作修改
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <string.h>
#include <fcntl.h>
#include <errno.h>
//编译 gcc -o t03_testfifo t03_testfifo.c -lpthread
void *thread_fun_write(void *p)
{
char *buf = "12345/n"; //加上/0一共7个字符
int fd;
fd = open("./myfifo",O_WRONLY);
if(fd == -1)
{
printf("write fifo open fail..../n");
exit(-1);
return NULL;
}
while(1)
{
write( fd, buf, strlen(buf)+1 );
write( fd, buf, strlen(buf)+1 );
write( fd, buf, strlen(buf)+1 );
write( fd, buf, strlen(buf)+1 );
write( fd, buf, strlen(buf)+1 );
write( fd, buf, strlen(buf)+1 );
write( fd, buf, strlen(buf)+1 );
write( fd, buf, strlen(buf)+1 );
write( fd, buf, strlen(buf)+1 );
write( fd, buf, strlen(buf)+1 );
printf("write ok/n");
sleep(2);
}
close(fd);
return NULL;
}
void *thread_fun_read(void *p)
{
int fd;
fd = open("./myfifo", O_RDONLY );
if(fd == -1)
{
printf("read fifo open fail.../n");
exit(-1);
return NULL;
}
char buf[1024] = {0};
int num;//保存读取数据的大小
while(1)
{
memset(buf,0,1024);
num = read( fd, buf, 1024 );
printf("read ok num:%d/n",num);
for(int i=0;i<num;i++){
printf("%c",buf[i]);
}
puts(buf);
}
close(fd);
return NULL;
}
int main()
{
printf("test fifo v1.0.3 /n");
//创建有名管道,如果管道存在则直接使用
int n = mkfifo("./myfifo",0664);
if( n < 0 && errno!=EEXIST)
{
perror("mkfifo");
return -1;
}
//创建线程
pthread_t writeId,readId;
pthread_create( &writeId, NULL, thread_fun_write, NULL );
pthread_create( &readId, NULL, thread_fun_read, NULL);
pthread_join(writeId,NULL);
pthread_join(readId,NULL);
while(1);
return 0;
}
//
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/aiops/280115.html