其他分享
首页 > 其他分享> > 通过匿名管道实现播放网络视频

通过匿名管道实现播放网络视频

作者:互联网

伪代码实现通过匿名管道播放网络视频、音乐等。

示例: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