您的位置:首页 > 理论基础 > 计算机网络

网络编程 笔记(七) 进程间通信

2015-10-22 16:09 591 查看

通过管道(PIPE)实现进程间通信

#include <stdio.h>
#include <unistd.h>
#define BUF_SIZE 30

int main(int argc, char *argv[])
{
int fds[2];
char str[] = "Who are you?";
char buf[BUF_SIZE];
pid_t pid;

pipe(fds);
pid = fork();
if (pid == 0) {
write(fds[1], str, sizeof(str));
}
else{
read(fds[0], buf, BUF_SIZE);
puts(buf);
}

return  0;
}


通过管道(PIPE)实现进程间双向通信

#include <stdio.h>
#include <unistd.h>
#define BUF_SIZE 30

int main(int argc, char *argv[])
{
int fds[2];
char str1[] = "Who are you?";
char str2[] = "Thank you for your message";
char buf[BUF_SIZE];
pid_t pid;

pipe(fds);
pid = fork();
if (pid == 0) {
write(fds[1], str1, sizeof(str1));
sleep(2);
read(fds[0], buf, BUF_SIZE);
printf("Child proc output : %s\n", buf);
}
else{
read(fds[0], buf, BUF_SIZE);
printf("Parent proc output : %s\n", buf);
write(fds[1], str2, sizeof(str2));
sleep(3);
}

return  0;
}


向管道传递数据时,先读到进程会把数据取走

双管道双向进程间通信

#include <stdio.h>
#include <unistd.h>
#define BUF_SIZE 30

int main(int argc, char *argv[])
{
int fds1[2], fds2[2];
char str1[] = "Who are you?";
char str2[] = "Thank you for your message";
char buf[BUF_SIZE];
pid_t pid;

pipe(fds1), pipe(fds2);
pid = fork();
if (pid == 0) {
write(fds1[1], str1, sizeof(str1));
read(fds2[0], buf, BUF_SIZE);
printf("Child proc output : %s\n", buf);
}
else{
read(fds1[0], buf, BUF_SIZE);
printf("Parent proc output : %s\n", buf);
write(fds2[1], str2, sizeof(str2));
sleep(3);
}

return  0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: