标签:视频 include pfd pid 匿名 exit fd close 播放
伪代码实现通过匿名管道播放网络视频、音乐等。
示例: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
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。