IO进程线程第八天(8.5)IPC机制(无名管道,有名管道,信号)+XMind

作业:

要求实现AB进程对话

A进程先发送一句话给B进程,B进程接收后打印

B进程再回复一句话给A进程,A进程接收后打印

重复1.2步骤,当收到quit后,要结束AB进程

提示:两根管道

1.第一个进程

#include
#include
int main(int argc, const char *argv[])
{
    if(mkfifo("./fifo1",0664)<0)
    {   
        if(errno!=17)
        {
            perror("mkfifo1");
            return -1; 
        }
    }   
    if(mkfifo("./fifo2",0664)<0)
    {   
        if(errno!=17)
        {
            perror("mkfifo2");
            return -1; 
        }
    }   
                                                                                                                                                                                                                                                                                                                                                                            
    printf("mkfifo1 success\n");
    printf("mkfifo2 success\n");
    int fd1=open("./fifo1",O_RDONLY);
    if(fd1<0)
    {   
        perror("open");
        return -1; 
    }   
    int fd2=open("./fifo2",O_WRONLY);
    if(fd2<0)
    {   
        perror("open");
        return -1; 
    }   
    printf("open seccess fd=%d\n",fd1);
    printf("open seccess fd=%d\n",fd2);
    char buf[128]="";
    ssize_t res=0;
    while(1)
    {   
        bzero(buf,sizeof(buf));
        res=read(fd1,buf,sizeof(buf));
        if(res<0)
        {
            perror("read");
        }
        if(0==res||strcmp(buf,"quit")==0)
        {
            printf("写端关闭\n");
            break;
        }
        printf("收到:%s\n",buf);
        printf("请输入>>>>");
        fgets(buf,sizeof(buf),stdin);
        buf[strlen(buf)-1]='\0';
        if((res=write(fd2,buf,sizeof(buf)))<0)
        {
            perror("write");
            return -1; 
        }
        printf("写入成功\n");
    
    }   
    close(fd1);
    close(fd2);
    return 0;
} 

2.第二个进程

#include
#include
int main(int argc, const char *argv[])
{
    if(mkfifo("./fifo1",0664)<0)
    {
        if(errno!=17)
        {
            perror("mkfifo1");
            return -1;
        }
    }
    if(mkfifo("./fifo2",0664)<0)
    {
        if(errno!=17)
        {
            perror("mkfifo2");
            return -1;
        }
    }

    printf("mkfifo1 success\n");
    printf("mkfifo2 success\n");
    int fd1=open("./fifo1",O_WRONLY);
    if(fd1<0)
    {
        perror("open");
        return -1;
    }
    int fd2=open("./fifo2",O_RDONLY);
    if(fd2<0)
    {
        perror("open");
        return -1;
    }                                                                                                                                                                                                                                                                                                                                                                       

    printf("open seccess fd=%d\n",fd1);
    printf("open seccess fd=%d\n",fd2);
    char buf[128]="";
    ssize_t res=0;
    while(1)
    {
        printf("请输入>>>>");
        fgets(buf,sizeof(buf),stdin);
        buf[strlen(buf)-1]='\0';
        if((res=write(fd1,buf,sizeof(buf)))<0)
        {
            perror("write");
            return -1;
        }
        printf("写入成功\n");
        bzero(buf,sizeof(buf));
        res=read(fd2,buf,sizeof(buf));
        if(res<0)
        {
            perror("read");
            return -1;
        }
        if(0==res||strcmp(buf,"quit")==0)
        {
            printf("写端关闭\n");
            break;
        }
        printf("收到:%s\n",buf);
    }
    close(fd1);
    close(fd2);

    return 0;
}

IO进程线程第八天(8.5)IPC机制(无名管道,有名管道,信号)+XMind_第1张图片 

你可能感兴趣的:(算法,c语言,IO,XMind)