|
发表于 2003-8-2 13:21:02
|
显示全部楼层
用两个程序说一下。
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- int
- main(void)
- {
- char name[20];
- //write(1, "What's your name?\n: ", 20);
- printf("What's your name?\n: "); /* 这里或者用write,或者用printf、fflush, */
- fflush(stdout); /* 只用printf导致调用进程read的时候一直阻塞 */
- fgets(name, 19, stdin);
- name[strlen(name) - 1] = '\0';
- printf("Your name is "%s".\n", name); /* 这里不用fflush,因为进程结束了 */
- exit(0);
- }
复制代码
编译用 gcc name.c - name
- #include <stdio.h>
- #include <sys/types.h>
- #include <unistd.h>
- #include <sys/wait.h>
- void err_sys(char *);
- int
- main(int argc, char *argv[])
- {
- int fd1[2], fd2[2];
- pid_t pid;
- int n;
- char buf[100];
- if(pipe(fd1) < 0)
- err_sys("pipe(fd1) error");
- if(pipe(fd2) < 0)
- err_sys("pipe(fd2) error");
- if((pid = fork()) < 0)
- err_sys("fork error");
- else if(pid == 0){
- if(fd1[0] != STDIN_FILENO)
- dup2(fd1[0], STDIN_FILENO);
- if(fd2[1] != STDOUT_FILENO)
- dup2(fd2[1], STDOUT_FILENO);
- close(fd1[1]);
- close(fd2[0]);
- execl("./name", "name", (char *)0);
- err_sys("execl error");
- }else{
- close(fd2[1]);
- close(fd1[0]);
- printf("This is %s\n", argv[0]);
- n = read(fd2[0], buf, 99);
- buf[n] = '\0';
- printf(buf);
- fgets(buf, 99, stdin);
- write(fd1[1], buf, strlen(buf));
- n = read(fd2[0], buf, 99);
- buf[n] = '\0';
- printf(buf);
- wait(NULL);
- }
- exit(0);
- }
- void
- err_sys(char *s)
- {
- perror(s);
- exit(-1);
- }
复制代码
这个是按半双工管道写的。 |
|