#include <unistd.h>
int pipe(int pipefd[2]);
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <unistd.h>
/*读管道*/
void read_from_pipe (int fd)
{
char message[100];
read(fd, message, 100);
printf("read from pipe: %s", message);
}
/*写管道*/
void write_to_pipe (int fd)
{
char *message = "Hello, pipe!\\n";
write(fd, message, strlen(message) + 1);
}
int main(void)
{
int pipefd[2];
pid_t pid;
int stat_val;
if (pipe(pipefd)) {
printf("create pipe failed\\n");
exit(1);
}
pid = fork();
switch(pid) {
case -1:
printf("fork error!\\n");
exit(1);
case 0:
close (pipefd[1]);
read_from_pipe (pipefd[0]);
exit(0);
default:
close (pipefd[0]);
write_to_pipe (pipefd[1]);
wait(&stat_val);
exit(0);
}
return 0;
}
beyes@linux-beyes:~/C/pipe> ./pipe.exe read from pipe: Hello, pipe! |
#include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <unistd.h> #include <string.h> /*子进程读写管道函数*/ void child_rw_pipe(int writefd, int readfd) { char *message1 = "这是一条来自子进程的消息!\\n"; write(writefd, message1, strlen(message1)+1); char message2[100]; read(readfd, message2, 100); printf("子进程从管道中读取到的消息: %s", message2); } /*父进程读写管道函数*/ void parent_rw_pipe(int readfd, int writefd) { char *message1 = "这是一条来自父进程的消息!\\n"; write(writefd, message1, strlen(message1)+1); char message2[100]; read(readfd, message2, 100); printf("父进程从管道中读取到的消息: %s", message2); } int main(void) { int pipefd1[2], pipefd2[2]; pid_t pid; int stat_val; printf("全双工通信:\\n\\n"); if (pipe(pipefd1)) { printf("管道-1创建失败\\n"); exit(1); } if (pipe(pipefd2)) { printf("管道-2创建失败\\n"); exit(1); } pid = fork(); switch(pid) { case -1: printf("创建进程失败\\n"); exit(1); case 0: /*子进程关闭 pipefd1 读端,关闭 pipefd2 的写端*/ close(pipefd1[0]); close(pipefd2[1]); child_rw_pipe(pipefd1[1],pipefd2[0]); exit(0); default: /*父进程关闭 pipefd1 写端,关闭 pipefd2 的读端*/ close(pipefd1[1]); close(pipefd2[0]); parent_rw_pipe(pipefd1[0], pipefd2[1]); wait(&stat_val); exit(0); } } |
欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) | Powered by Discuz! X3.2 |