linux下匿名管道传输音乐文件

linux下匿名管道传输音乐文件,第1张

调用pipe函数时在内核中开辟一块缓冲区(称为管道)用于通信,它有一个读端一个写端,然后通过_pipe参数传出给用户程序两个文件描述符,_pipe[0]指向管道的读端,_pipe[1]指向管道的写端。所以管道在用户程序看起来就像一个打开的文件,通过read(_pipe[0])或者write(_pipe[1])向这个文件读写数据其实是在读写内核缓冲区。pipe函数调用成功返回0,调用失败返回-1。

1父进程调用pipe开辟管道,得到两个文件描述符指向管道的两端。

2. 父进程调用fork创建⼦进程,那么子进程也有两个文件描述符指向同一管道。

3. 父进程关闭管道读端,子进程关闭管道写端。父进程可以往管道里写,子进程可以从管道⾥读,管道是用环形队列实现的,数据从写端流入从读端流出,这样就实现了进程间通信

匿名管道间的通信是单向的,并且是、只能是具有血缘关系的进程间通信

#include <unistd.h>

#include <stdio.h>

#include <stdlib.h>

int main()

{

int fd[2]

// 创建二个 fd, fd[0] 管道用于读, fd[1] 管道用于写

pipe(fd)

// 创建进程

pid_t pid = fork()

if (pid == 0)

{

// 子进程,读取整数 n

int n

read(fd[0], &n, sizeof(int))

// 计算 1 - n 的偶数和

int sum = 0

for (int i = 1 i <= n ++i)

{

if (i % 2 == 0)

{

sum += i

}

}

printf("The sum of all even number from 1 to %d is %d\n", n, sum)

// 子进程工作完后使用 exit(0) 退出

exit(0)

}

else

{

// 父进程,写入整数 n

int n

printf("Please input n: ")

scanf("%d", &n)

write(fd[1], &n, sizeof(int))

}

}

Linux 环境下编译及测试结果如下:


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/7515307.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-06
下一篇2023-04-06

发表评论

登录后才能评论

评论列表(0条)

    保存