1、利用多线程与有名管道技术,实现两个进程之间发送即时消息,实现聊天功能。

来源:互联网 发布:冠新软件下载 编辑:程序博客网 时间:2024/05/22 00:13

fifo1源文件

#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <pthread.h>#include <string.h>#include <errno.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>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 <stdio.h>#include <stdlib.h>#include <unistd.h>#include <pthread.h>#include <string.h>#include <errno.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>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;}

makefile一定要注意添加-lpthread

.SUFFIXES: .c .oCC=gccASRCS=myfifo1.cBSRCS=myfifo2.cAOBJS=$(ASRCS:.c=.o)BOBJS=$(BSRCS:.c=.o)AEXEC=myfifo1BEXEC=myfifo2all:$(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*


0 0
原创粉丝点击