fifo1源文件
#include
#include
#include
#include
#include
#include
#include
#include
#include
void* readfifo()
{
const char *sfifoname = "fifo1";
int fd = open(sfifoname, O_RDONLY);
if (fd == -1)
{
printf("open %s failed, %s\n", sfifoname, strerror(errno));
return NULL;
}
int len = 0;
char buf[128];
while (1)
{
memset(buf, 0, sizeof(buf));
len = read(fd, buf, sizeof(buf));
if (len > 0)
{
printf("%s\n", buf);
}
else
{
break;
}
}
close(fd);
return NULL;
}
void* writefifo()
{
const char *sfifoname = "fifo2";
int fd = open(sfifoname, O_WRONLY);
if (fd == -1)
{
printf("open %s failed, %s\n", sfifoname, strerror(errno));
return NULL;
}
char buf[128];
while (1)
{
memset(buf, 0, sizeof(buf));
read(STDIN_FILENO, buf, sizeof(buf));
write(fd, buf, sizeof(buf));
}
close(fd);
return NULL;
}
int main(int arg, char *args[])
{
pthread_t thr_d1, thr_d2;
pthread_create(&thr_d1, NULL, readfifo, NULL);
pthread_create(&thr_d2, NULL, writefifo, NULL);
pthread_join(thr_d1, NULL);//主线程挂起,等待thr_d1退出
pthread_join(thr_d1, NULL);//主线程挂起,等待thr_d2退出
return 0;
}
fifo源文件
#include
#include
#include
#include
#include
#include
#include
#include
#include
void* readfifo()
{
const char *sfifoname = "fifo2";
int fd = open(sfifoname, O_RDONLY);
if (fd == -1)
{
printf("open %s failed, %s\n", sfifoname, strerror(errno));
return NULL;
}
int len = 0;
char buf[128];
while (1)
{
memset(buf, 0, sizeof(buf));
len = read(fd, buf, sizeof(buf));
if (len > 0)
{
printf("%s\n", buf);
}
else
{
break;
}
}
close(fd);
return NULL;
}
void* writefifo()
{
const char *sfifoname = "fifo1";
int fd = open(sfifoname, O_WRONLY);
if (fd == -1)
{
printf("open %s failed, %s\n", sfifoname, strerror(errno));
return NULL;
}
char buf[128];
while (1)
{
memset(buf, 0, sizeof(buf));
read(STDIN_FILENO, buf, sizeof(buf));
write(fd, buf, sizeof(buf));
}
close(fd);
return NULL;
}
int main(int arg, char *args[])
{
pthread_t thr_d1, thr_d2;
pthread_create(&thr_d1, NULL, readfifo, NULL);
pthread_create(&thr_d2, NULL, writefifo, NULL);
pthread_join(thr_d1, NULL);
pthread_join(thr_d2, NULL);
return 0;
}
.SUFFIXES: .c .o
CC=gcc
ASRCS=myfifo1.c
BSRCS=myfifo2.c
AOBJS=$(ASRCS:.c=.o)
BOBJS=$(BSRCS:.c=.o)
AEXEC=myfifo1
BEXEC=myfifo2
all:$(AOBJS) $(BOBJS)
$(CC) -o $(AEXEC) $(AOBJS) -lpthread
$(CC) -o $(BEXEC) $(BOBJS) -lpthread
@echo '-------------ok--------------'
.c.o:
$(CC) -Wall -g -o $@ -c $<
clean:
rm -f $(AOBJS)
rm -f $(BOBJS)
rm -f core*