今日任务

1.代码(一次只能发一次消息,不然会存在一些小问题,在接受消息之后会立刻输出上次的第二次发送的消息)
read.c文件(先读取消息)
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- int main(int argc, const char *argv[])
- {
- //创建打开第一个管道文件
- if(-1==mkfifo("./fifo1",0664)){
- if(17!=errno){
- perror("mkfifo1");
- return -1;
- }
- }
- puts("create pipe1 success");
- //打开管道文件
- int fd1=open("./fifo1",O_RDONLY);
- if(-1==fd1){
- perror("open1");
- return -1;
- }
- puts("open1 success");
- //创建打开第二个管道文件
- if(-1==mkfifo("./fifo2",0664)){
- if(17!=errno){
- perror("mkfifo2");
- return -1;
- }
- }
- puts("create pipe2 success");
- //打开管道文件
- int fd2=open("./fifo2",O_WRONLY);
- if(-1==fd2){
- perror("open2");
- return -1;
- }
- puts("open2 success");
- //读 写
- char buf1[128];
- char buf2[128];
- while(1){
- //读
- bzero(buf1,sizeof(buf1));
- int res=read(fd1,buf1,sizeof(buf1));
- if(res<0){
- perror("read");
- return -1;
- }else if(res==0){
- break;
- }else{
- printf("jack:%s\n",buf1);
- //fprintf(stdout,"jack:%s\n",buf1);
- }
- //写
- bzero(buf2,sizeof(buf2));
- //scanf("%s",buf2);
- fgets(buf2,sizeof(buf2),stdin);
- buf2[strlen(buf2)-1]='\0';
- if(strcmp(buf2,"quit")==0)
- break;
- if(-1==write(fd2,buf2,sizeof(buf2))){
- perror("write");
- return -1;
- }
-
- }
-
- //关闭
- close(fd1);
- close(fd2);
- return 0;
- }
write.c文件(先发送消息的)
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- int main(int argc, const char *argv[])
- {
- //创建打开第一个管道文件
- if(-1==mkfifo("./fifo1",0664)){
- if(17!=errno){
- perror("mkfifo1");
- return -1;
- }
- }
- puts("create pipe1 success");
- //打开管道文件
- int fd1=open("./fifo1",O_WRONLY);
- if(-1==fd1){
- perror("open1");
- return -1;
- }
- puts("open1 success");
- //创建打开第二个管道文件
- if(-1==mkfifo("./fifo2",0664)){
- if(17!=errno){
- perror("mkfifo2");
- return -1;
- }
- }
- puts("create pipe2 success");
- //打开管道文件
- int fd2=open("./fifo2",O_RDONLY);
- if(-1==fd2){
- perror("open2");
- return -1;
- }
- puts("open2 success");
-
- char buf1[128];
- char buf2[128];
- while(1){
- //写
- bzero(buf1,sizeof(buf1));
- //scanf("%s",buf1);
- fgets(buf1,sizeof(buf1),stdin);
- buf1[strlen(buf1)-1]='\0';
- if(strcmp(buf1,"quit")==0)
- break;
- if(-1==write(fd1,buf1,sizeof(buf1))){
- perror("write");
- return -1;
- }
- //读
- bzero(buf2,sizeof(buf2));
- int res=read(fd2,buf2,sizeof(buf2));
- if(res<0){
- perror("read");
- return -1;
- }else if(res==0){
- break;
- }else{
- printf("rose:%s\n",buf2);
- //fprintf(stdout,"rose:%s\n",buf2);
- }
- }
-
- //关闭
- close(fd1);
- close(fd2);
- return 0;
- }
运行结果

2.代码(就是把代码1分别放到线程中就可以了,)
jack.c文件
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
-
-
- //线程1:读取
- void * fun1(void*arg){
- //创建打开第一个管道文件
- if(-1==mkfifo("./fifo1",0664)){
- if(17!=errno){
- perror("mkfifo1");
- return NULL;
- }
- }
- puts("create pipe1 success");
- //打开管道文件
- int fd1=open("./fifo1",O_WRONLY);
- if(-1==fd1){
- perror("open1");
- return NULL;
- }
- puts("open1 success");
- char buf1[128];
- while(1){
-
- //写
- bzero(buf1,sizeof(buf1));
- //scanf("%s",buf1);
- fgets(buf1,sizeof(buf1),stdin);
- buf1[strlen(buf1)-1]='\0';
- if(strcmp(buf1,"quit")==0)
- break;
- if(-1==write(fd1,buf1,sizeof(buf1))){
- perror("write");
- return NULL;
- }
-
- }
-
- close(fd1);
- pthread_exit(NULL);
- }
- //线程2:写出
- void * fun2(void*arg){
- //创建打开第二个管道文件
- if(-1==mkfifo("./fifo2",0664)){
- if(17!=errno){
- perror("mkfifo2");
- return NULL;
- }
- }
- puts("create pipe2 success");
- //打开管道文件
- int fd2=open("./fifo2",O_RDONLY);
- if(-1==fd2){
- perror("open2");
- return NULL;
- }
- puts("open2 success");
-
- char buf2[128];
- while(1){
-
- //读
- bzero(buf2,sizeof(buf2));
- int res=read(fd2,buf2,sizeof(buf2));
- if(res<0){
- perror("read");
- return NULL;
- }else if(res==0){
- break;
- }else{
- printf("rose:%s\n",buf2);
- //fprintf(stdout,"rose:%s\n",buf2);
- }
-
- }
-
- close(fd2);
- pthread_exit(NULL);
- }
- int main(int argc, const char *argv[])
- {
- //创建线程
- pthread_t th1,th2;
- if(0!=pthread_create(&th1,NULL,fun1,NULL)){
- puts("th1 create failed");
- return -1;
- }
- if(0!=pthread_create(&th2,NULL,fun2,NULL)){
- puts("th2 create failed");
- return -1;
- }
-
- pthread_join(th1,NULL);
- pthread_join(th2,NULL);
- return 0;
- }
rose文件
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- //线程1:写出
- void * fun1(void* arg){
- //创建打开第一个管道文件
- if(-1==mkfifo("./fifo1",0664)){
- if(17!=errno){
- perror("mkfifo1");
- return NULL;
- }
- }
- puts("create pipe1 success");
- //打开管道文件
- int fd1=open("./fifo1",O_RDONLY);
- if(-1==fd1){
- perror("open1");
- return NULL;
- }
- puts("open1 success");
- char buf1[128];
- while(1){
-
- //读
- bzero(buf1,sizeof(buf1));
- int res=read(fd1,buf1,sizeof(buf1));
- if(res<0){
- perror("read");
- return NULL;
- }else if(res==0){
- break;
- }else{
- printf("jack:%s\n",buf1);
- //fprintf(stdout,"jack:%s\n",buf1);
- }
-
-
- }
-
- close(fd1);
- pthread_exit(NULL);
- }
- //线程2:读取
- void *fun2(void* arg){
- //创建打开第二个管道文件
- if(-1==mkfifo("./fifo2",0664)){
- if(17!=errno){
- perror("mkfifo2");
- return NULL;
- }
- }
- puts("create pipe2 success");
- //打开管道文件
- int fd2=open("./fifo2",O_WRONLY);
- if(-1==fd2){
- perror("open2");
- return NULL;
- }
- puts("open2 success");
- char buf2[128];
- while(1){
- //写
- bzero(buf2,sizeof(buf2));
- //scanf("%s",buf2);
- fgets(buf2,sizeof(buf2),stdin);
- buf2[strlen(buf2)-1]='\0';
- if(strcmp(buf2,"quit")==0)
- break;
- if(-1==write(fd2,buf2,sizeof(buf2))){
- perror("write");
- return NULL;
- }
-
- }
-
- close(fd2);
- pthread_exit(NULL);
-
- }
- int main(int argc, const char *argv[])
- {
- //创建线程
- pthread_t th1,th2;
- if(0!=pthread_create(&th1,NULL,fun1,NULL)){
- puts("th1 create failed");
- return -1;
- }
- if(0!=pthread_create(&th2,NULL,fun2,NULL)){
- puts("th2 create failed");
- return -1;
- }
-
- pthread_join(th1,NULL);
- pthread_join(th2,NULL);
- return 0;
- }
运行结果

今日思维导图

to be honest,sometime my brain is shutdown .