0821
竖直方向分屏
:vsplit 2.c
:vs 2.c
切换窗口
ctrl ww
----------------- 下午
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <unistd.h>
#define LEN 1024
#define R 0
#define W 1
void trans(char *s)
{
char ch;
while(ch = *s)
*s++ = toupper(ch);
*s = 0;
}
int main()
{
int pipe_a2b[2];
int pipe_b2a[2];
if(pipe(pipe_a2b) < 0){ // 创建 A 管道
perror("pipe");
exit(1);
}
if(pipe(pipe_b2a) < 0){
perror("pipe");
exit(1);
}
pid_t proc_a = fork();
if(proc_a == 0){ // 创建 子进程 A; 先写数据
close(pipe_a2b[R]);
close(pipe_b2a[W]);
char bufa[LEN] = "abc";
while(1){
gets(bufa);
printf("proc_a send %s\n", bufa);
write(pipe_a2b[W], bufa, LEN);
read(pipe_b2a[R], bufa, LEN);
printf("--------------proc_a accept:%s\n",bufa);
}
exit(0);
}
pid_t proc_b = fork();
if(proc_b == 0){ // 创建子进程 B; 开始读数据
close(pipe_a2b[W]);
close(pipe_b2a[R]);
char bufb[LEN];
while(1){
read(pipe_a2b[R], bufb, LEN);
printf("--------------proc_b accept:%s\n", bufb);
trans(bufb);
printf("proc_b send:%s\n", bufb);
write(pipe_b2a[W], bufb, LEN);
}
exit(0);
}
wait();
wait();
return 0;
}
/*
1. 创建A进程, 管道x在A端写,y在A端读
A 接收 提示符的输入,
写入x;
读y,并输出到提示符
2. 创建B进程, 管道x在A另一端读,y在B另一端写
B 读x,转换为大写
写y;
*/