美文网首页
两终端自由对话

两终端自由对话

作者: b6aed1af4328 | 来源:发表于2016-12-03 20:13 被阅读17次

献给忍哥。
星期四做了通过文件读写实现终端(进程)间的对话,忍哥说好蠢,你说一句我说一句很死板,就不能一个人突然说很多句,自由对话么?课后想了想,实现了这一功能。
通过2文件读写,myfifo记录bro1的话,myfifo1记录bro2的话,2个终端2个程序,程序fork出一个父进程和一个子进程,父进程负责一个文件的写,子进程负责另一文件的读,
写成死循环,sleep(1)1秒刷新一次。
lei141.cc

#include<sys/types.h>
#include<sys/stat.h>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<unistd.h>//用vim打开管道文件 无法操作
#include<errno.h>
#include<fcntl.h>


int main()
{
    int ret=-1;
    ret=mkfifo("/home/lifulin/Pictures/myfifo",0777);
    if(-1==ret)
    {
        if(EEXIST!=errno)
        {
            perror("mkfifo");
            exit(EXIT_FAILURE);
        }
        else 
        {
            printf("myfifo exist\n");
        }

    }
    ret=mkfifo("/home/lifulin/Pictures/myfifo1",0777);
    if(-1==ret)
    {
        if(EEXIST!=errno)
        {
            perror("mkfifo");
            exit(EXIT_FAILURE);
        }
        else 
        {
            printf("myfifo1 exist\n");
        }

    }
    printf("fifo is ok\n");
    pid_t pid=-1;
    pid=fork();
    if(pid>0)
    {
        int fd=-1;
        fd=open("/home/lifulin/Pictures/myfifo",O_RDWR);
       int judge=1;
       while(1)
         {
             sleep(1);
                 char caBuf[32]={'\0'};
               ret=read(fd,caBuf,sizeof(caBuf));
                   if(ret>0)
                  {
                  

                    printf("bro1:%s\n",caBuf);
                  }
                 if(ret==0)
                 {
                     printf("\n");
                 }
         }
         close(fd);
    }
    if(pid==0)
    {
            int ret=-1;
         int fd=-1;
          fd=open("/home/lifulin/Pictures/myfifo1",O_RDWR);
              int judge=1;
   while(1)
     {    
            sleep(1);
           char test[32]={"11"};
             char caBuf[32]={'\0'};
              scanf("%s",caBuf);
              ret=write(fd,caBuf,sizeof(caBuf));//只有一端打开,是不写不读的。
              if(ret>0)
                  {

                      }
                  if(ret==-1)
                  {
                 printf("写入失败\n");
                     return 0;
                 }

       } 
       close(fd);
    }
    if(pid==-1)
    {
        perror("fork");
        exit(EXIT_FAILURE);
    }
    return 0;
}

lei142.cc

#include<sys/types.h>
#include<sys/stat.h>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<unistd.h>//用vim打开管道文件 无法操作
#include<errno.h>
#include<fcntl.h>


int main()
{
    pid_t pid=-1;
    pid=fork();
    if(pid>0)
    {
        int ret=-1;
        int fd=-1;
         fd=open("/home/lifulin/Pictures/myfifo",O_RDWR);
            int judge=1;
       while(1)
         {
                sleep(1);
               char test[32]={"11"};
                 char caBuf[32]={'\0'};
           scanf("%s",caBuf);
              ret=write(fd,caBuf,sizeof(caBuf));//只有一端打开,是不写不读的。
              if(ret>0)
                  {
                      }
                  if(ret==-1)
                  {
                 printf("写入失败\n");
                     return 0;
                 }
       } 
    }
    if(pid==0)
    {
         int fd=-1;
         int ret=-1;
        fd=open("/home/lifulin/Pictures/myfifo1",O_RDWR);
       int judge=1;
       while(1)
         {
             sleep(1);
                 char caBuf[32]={'\0'};
               ret=read(fd,caBuf,sizeof(caBuf));
                   if(ret>0)
                  {
                  

                    printf("bro2:%s\n",caBuf);
                  }
                 if(ret==0)
                 {
                     printf("\n");
                 }
         }
         close(fd);
    }
    if(pid==-1)
    {
        perror("fork");
        exit(EXIT_FAILURE);
    }
    return 0;
}

lei141.cc和lei142.cc在不同终端下运行,注意文件路径的修改。

相关文章

  • 两终端自由对话

    献给忍哥。星期四做了通过文件读写实现终端(进程)间的对话,忍哥说好蠢,你说一句我说一句很死板,就不能一个人突然说很...

  • 关键对话之对话

    1.什么是对话? 对话是两个人或多个人观点的自由交流。 成功的对话关键在于相关信息的自由交流,即双方愿意公开坦诚地...

  • 将linux的HOME目录下的中文文件夹名称改为英文

    打开终端,在终端中输入命令 跳出对话框询问是否将目录转化为英文路径,同意并关闭。 在终端中输入命令

  • 快捷方式

    快捷方式 唤出菜单 弹出运行命令对话框 退出 打开终端

  • 人人都是艺术家——林正碌 1

    “画画让人觉得自由。” “自由的人更要画画。” 这是画友美美和丢丢的对话,正切合了我的心意,于是自由的我今天画了两...

  • Mint(Linux)系统设置优化及其常用软件安装笔记

    LInux /home下中文目录如何修改成英文? 打开终端,在终端中输入命令: 跳出对话框询问是否将目录转化为英文...

  • AEAS口语自由对话一般考什么?

    AEAS口语自由对话一般考什么?一般来说自由对话就是口语测试,但是口语测试共有三部分,自由对话是属于哪一部分以及A...

  • 安装Command Line Tools for Xcode

    在终端输入: xcode-select --install 弹出的对话框选择安装。 引用: http://bbs....

  • 对话录:自由

    1.六岁的自由 小鱼六岁时,一天晚上九点多。 柳兮:“你该睡觉了” 小鱼:不,我不能睡觉,那样会失去自由。 2.手...

  • 读书继续

    有种幸福叫阅览,有种对话叫领悟,有种自由叫畅读。自由、平等、幸福地对待自己,让两个灵魂无限接近,呼吸着呼吸,痛苦着...

网友评论

      本文标题:两终端自由对话

      本文链接:https://www.haomeiwen.com/subject/odvcmttx.html