c++ 在c中的fork()和pipes()

什么是fork()和什么是pipes(),为什么我们同时使用?
任何解释为什么使用两者都是必要的Scenerio将不胜感激。
在c()中的fork()和pipes()之间有什么区别?
我们可以同时使用c吗?

我需要知道这是因为..
我想在c中实现一个可以访问实时视频输入的程序,转换其格式并将其写入文件。
这可以是最好的方法?
我用x264这个。到目前为止,我已经实现了文件格式的部分转换。
现在我必须在现场直播中实现。使用管道是个好主意吗?在另一个进程中捕获视频并将其提供给另一个进程?
任何帮助将不胜感激

管道是进程间通信的机制。通过一个进程写入管道的数据可以被另一个进程读取。管道的创建原理是管道功能。这将创建管道的读取和写入两端。单个进程使用管道与自身进行交谈并不是非常有用。在典型的使用过程中,一个进程会在一个或多个子进程之前创建一个管道。然后,该管道用于在父进程或子进程之间或在两个兄弟进程之间进行通信。在所有操作系统shell中都可以看到这种通信的一个熟悉的例子。当您在shell中键入命令时,它将通过调用fork来生成由该命令表示的可执行文件。一个管道被打开到新的子进程,其输出被shell读取和打印。 This page具有叉和管功能的完整示例。为方便起见,代码如下:

 #include <sys/types.h>
 #include <unistd.h>
 #include <stdio.h>
 #include <stdlib.h>

 /* Read characters from the pipe and echo them to stdout. */

 void
 read_from_pipe (int file)
 {
   FILE *stream;
   int c;
   stream = fdopen (file, "r");
   while ((c = fgetc (stream)) != EOF)
     putchar (c);
   fclose (stream);
 }

 /* Write some random text to the pipe. */

 void
 write_to_pipe (int file)
 {
   FILE *stream;
   stream = fdopen (file, "w");
   fprintf (stream, "hello, world!\n");
   fprintf (stream, "goodbye, world!\n");
   fclose (stream);
 }

 int
 main (void)
 {
   pid_t pid;
   int mypipe[2];

   /* Create the pipe. */
   if (pipe (mypipe))
     {
       fprintf (stderr, "Pipe failed.\n");
       return EXIT_FAILURE;
     }

   /* Create the child process. */
   pid = fork ();
   if (pid == (pid_t) 0)
     {
       /* This is the child process.
          Close other end first. */
       close (mypipe[1]);
       read_from_pipe (mypipe[0]);
       return EXIT_SUCCESS;
     }
   else if (pid < (pid_t) 0)
     {
       /* The fork failed. */
       fprintf (stderr, "Fork failed.\n");
       return EXIT_FAILURE;
     }
   else
     {
       /* This is the parent process.
          Close other end first. */
       close (mypipe[0]);
       write_to_pipe (mypipe[1]);
       return EXIT_SUCCESS;
     }
 }

就像其他C函数一样,您可以在C中使用fork和pipe。

翻译自:https://stackoverflow.com/questions/4812891/fork-and-pipes-in-c

转载注明原文:c++ 在c中的fork()和pipes()