通过匿名管道实现播放网络视频
作者:互联网
伪代码实现通过匿名管道播放网络视频、音乐等。
示例:player.c(子读父写)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/wait.h>
#include <fcntl.h>
int main()
{
int pfd[2];
pid_t pid;
int fd;
if(pipe(pfd) < 0) //创建匿名管道
{
perror("pipe()");
exit(1);
}
pid = fork(); //创建子进程
if(pid<0)
{
perror("fork()");
exit(1);
}
if(pid ==0) //子进程
{
fd = open("/dev/null",O_RDWR); //打开/dev目录下的空文件
close(pfd[1]); //关闭写端
dup2(pfd[0],0); //将读端映射到标准输入上
if(pfd[0] != 0) //关闭读端
close(pfd[0]);
dup2(1,fd); //将标准输出、标准出错映射到fd上
dup2(2,fd);
close(1); //关闭标准输出、标准错误
close(2);
execlp("/xxx/xxx/mpeg123","mpeg123","-",NULL); //exec族函数 mpeg123替换当前子进程
perror("execvp()"); //替换出错报错结束
exit(1);
}
else //父进程
{
close(pfd[0]); //关闭读端
//socket data //通过socket通讯接收网络数据写入管道
close(pfd[1]); //关闭写端
wait(NULL); //等待子进程退出
}
exit(0);
}
标签:视频,include,pfd,pid,匿名,exit,fd,close,播放 来源: https://www.cnblogs.com/linux-learn/p/16545752.html