2023.09.13

2023.09.13_第1张图片

第一题 

A进程代码

#include
int main(int argc, char const *argv[])
{
    //创建第一个管道
    if(mkfifo("./fifo_1",0664)<0){
        if(errno!=17){
            perror("mkfifo");
            return -1;
        }
    }
    //创建第二个管道
        if(mkfifo("./fifo_2",0664)<0){
        if(errno!=17){
            perror("mkfifo");
            return -1;
        }
    }
    //打开
    char buf[128]="";
    while(1){
        //打开第一个管道(读)
        int fp1=open("./fifo_1",O_RDONLY);
        if(fp1<0){
        perror("open");
        return -1;
        }
        bzero(buf,sizeof(buf));
        off_t res=read(fp1,buf,sizeof(buf));
        printf("读取数据为>>>>%s\n",buf);
        if(0==res){
            puts("数据读取完成");
            break;
        }
        //关闭第一个管道
        close(fp1);
        //打开第二个管道(写)
        int fp2=open("./fifo_2",O_WRONLY);
        if(fp2<0){
        perror("open");
        return -1;
    }
        bzero(buf,sizeof(buf));
        printf("输入数据为>>>");
        fgets(buf,sizeof(buf),stdin);
        buf[strlen(buf)-1]='\0';
        if(strcmp(buf,"quit")==0){
            puts("退出输入");
            break;
        }
        write(fp2,buf,sizeof(buf));
        puts("发送成功");
        //关闭第二个管道
        close(fp2);
    }
    return 0;
}

B进程代码

#include
int main(int argc, char const *argv[])
{
    //创建第一个管道
        if(mkfifo("./fifo_1",0664)<0){
        if(errno!=17){
            perror("mkfifo");
            return -1;
        }
    }
    //创建第二个管道
            if(mkfifo("./fifo_2",0664)<0){
        if(errno!=17){
            perror("mkfifo");
            return -1;
        }
    }
    //打开
    char buf[128]="";
    while(1){
        //打开第一个管道(写)
        int fp1=open("./fifo_1",O_WRONLY);
        if(fp1<0){
        perror("open");
        return -1;
        }
        bzero(buf,sizeof(buf));
        printf("输入数据为>>>");
        fgets(buf,sizeof(buf),stdin);
        buf[strlen(buf)-1]='\0';
        if(strcmp(buf,"quit")==0){
            puts("退出输入");
            break;
        }
        write(fp1,buf,sizeof(buf));
        puts("发送成功");
        //关闭第一个管道
        close(fp1);
        //打开第二个管道(读)
        int fp2=open("./fifo_2",O_RDONLY);
        if(fp2<0){
        perror("open");
        return -1;
        }
        bzero(buf,sizeof(buf));
        off_t res=read(fp2,buf,sizeof(buf));
        printf("读取数据为>>>>%s\n",buf);
        if(0==res){
            puts("数据读取完成");
            break;
        }
        //关闭第二个管道
        close(fp2);
    }
    return 0;
}

现象

思考题

A代码

#include
pthread_t tidA;
pthread_t tidB;
void* funcA(void* arg);
void* funcB(void* arg);
int main(int argc, char const *argv[])
{
    if(pthread_create(&tidA,NULL,funcA,NULL)!=0){
        printf("__%d__\n",__LINE__);
        return -1;
    }
    if(pthread_create(&tidB,NULL,funcB,NULL)!=0){
        printf("__%d__\n",__LINE__);
        return -1;
    }
    while(1)
    sleep(1);
    return 0;
}
void* funcA(void* arg)
{
    char buf[128]="";
    while(1){
        if(mkfifo("./fifo_1",0664)<0){
            if(errno!=17){
                perror("mkfifo");
                return NULL;
            }
        }
        int fp1=open("./fifo_1",O_RDONLY);
        if(fp1<0){
            perror("open");
            return NULL;
        }
        bzero(buf,sizeof(buf));
        off_t res=read(fp1,buf,sizeof(buf));
        printf("读取数据为>>>>%s\n",buf);
        if(0==res){
            puts("数据读取完成");
            break;
        }
        close(fp1);
    }
}
void* funcB(void* arg)
{
    char buf[128]="";
    while(1){
        if(mkfifo("./fifo_2",0664)<0){
            if(errno!=17){
                perror("mkfifo");
                return NULL;
            }
        }
        int fp2=open("./fifo_2",O_WRONLY);
        if(fp2<0){
            perror("open");
            return NULL;
        }
        bzero(buf,sizeof(buf));
        printf("输入数据为>>>\n");
        fgets(buf,sizeof(buf),stdin);
        buf[strlen(buf)-1]='\0';
        if(strcmp(buf,"quit")==0){
            puts("退出输入");
            break;
        }
        write(fp2,buf,sizeof(buf));
        puts("发送成功");
        close(fp2);
    }
}

B代码

#include
pthread_t tidA;
pthread_t tidB;
void* funcA(void* arg);
void* funcB(void* arg);
int main(int argc, char const *argv[])
{
    if(pthread_create(&tidA,NULL,funcA,NULL)!=0){
        printf("__%d__\n",__LINE__);
        return -1;
    }
    if(pthread_create(&tidB,NULL,funcB,NULL)!=0){
        printf("__%d__\n",__LINE__);
        return -1;
    }
    while(1)
    sleep(1);
    return 0;
}
void* funcA(void* arg)
{
    char buf[128]="";
    while(1){
        if(mkfifo("./fifo_2",0664)<0){
            if(errno!=17){
                perror("mkfifo");
                return NULL;
            }
        }
        int fp1=open("./fifo_2",O_RDONLY);
        if(fp1<0){
            perror("open");
            return NULL;
        }
        bzero(buf,sizeof(buf));
        off_t res=read(fp1,buf,sizeof(buf));
        printf("读取数据为>>>>%s\n",buf);
        if(0==res){
            puts("数据读取完成");
            break;
        }
        close(fp1);
    }
}
void* funcB(void* arg)
{
    char buf[128]="";
    while(1){
        if(mkfifo("./fifo_1",0664)<0){
            if(errno!=17){
                perror("mkfifo");
                return NULL;
            }
        }
        int fp2=open("./fifo_1",O_WRONLY);
        if(fp2<0){
            perror("open");
            return NULL;
        }
        bzero(buf,sizeof(buf));
        printf("输入数据为>>>\n");
        fgets(buf,sizeof(buf),stdin);
        buf[strlen(buf)-1]='\0';
        if(strcmp(buf,"quit")==0){
            puts("退出输入");
            break;
        }
        write(fp2,buf,sizeof(buf));
        puts("发送成功");
        close(fp2);
    }
}

现象

2023.09.13_第2张图片

你可能感兴趣的:(服务器,linux,运维)