当前位置:  技术问答>linux和unix

先pipe() 然后fork() 子进程execl另一个可执行程序

    来源: 互联网  发布时间:2016-07-26

    本文导语:  如题,我调试的是 Beginning linux Programming(Third Edition)中第十三章的例子。pipe3 和pipe4 通信 pipe3源代码: #include  #include  #include  #include  int main() { int data_processed; int file_pipes[2]; const char some_data[] = "123"; char...

如题,我调试的是 Beginning linux Programming(Third Edition)中第十三章的例子。pipe3 和pipe4 通信

pipe3源代码:
#include 
#include 
#include 
#include 

int main()
{
int data_processed;
int file_pipes[2];
const char some_data[] = "123";
char buffer[BUFSIZ + 1];
pid_t fork_result;

memset(buffer, '', sizeof(buffer));

if(pipe(file_pipes) == 0)
{
fork_result = fork();
if(fork_result == (pid_t)-1)
{
fprintf(stderr, "Fork failure");
exit(EXIT_FAILURE);
}
if(fork_result == 0)
{
sprintf(buffer, "%d", file_pipes[0]);
(void)execl("pipe4", "pipe4", buffer, (char *)0);
exit(EXIT_FAILURE);
}
else
{
data_processed = write(file_pipes[1], some_data, strlen(some_data));
printf("%d - wrote %d bytesn", getpid(), data_processed);
}
}
exit(EXIT_SUCCESS);
}

pipe4源代码:
#include 
#include 
#include 
#include 

int main()
{
int data_processed;
int file_pipes[2];
const char some_data[] = "123";
char buffer[BUFSIZ + 1];
pid_t fork_result;

memset(buffer, '', sizeof(buffer));

if(pipe(file_pipes) == 0)
{
fork_result = fork();
if(fork_result == (pid_t)-1)
{
fprintf(stderr, "Fork failure");
exit(EXIT_FAILURE);
}
if(fork_result == 0)
{
sprintf(buffer, "%d", file_pipes[0]);
(void)execl("pipe4", "pipe4", buffer, (char *)0);
exit(EXIT_FAILURE);
}
else
{
data_processed = write(file_pipes[1], some_data, strlen(some_data));
printf("%d - wrote %d bytesn", getpid(), data_processed);
}
}
exit(EXIT_SUCCESS);
}

    我的疑问是:在pipe3中子进程启动了pipe4,把管道的读取端 文件描述符 传给了pipe4, pipe4怎么能认出 传递过来的文件描述符是管道的,而不是系统中其他进程的 文件描述符?

|
我也很郁闷
pipe4可以
data_processed = read(3, buffer, BUFSIZ); 

就是说exec创建pipe4时fd=3的文件描述符已经打开
这个应该是我们对exec函数族的理解不够深造成的吧

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 一个c程序运行的时候提示Broken pipe,这个Broken pipe是什么意思?
  • Linux下怎样查c程序的错误号?程序出现错误:System error 32: Broken Pipe, 是什么原因?
  • 我做的 客戶耑程序執行暸socket,connect,缺在write() 時齣錯,error:broken pipe
  • 调试dup与pipe结合的简单程序
  • java命名空间java.nio.channels类pipe的类成员方法: pipe定义及介绍
  • 请问,pipe 源码中,为何没有 pipe(...) 这个函数?
  • java命名空间java.nio.channels类pipe.sourcechannel的类成员方法: pipe.sourcechannel定义及介绍
  • pipe(a)了一次,又PIPE(a)了一次,是建立了两个管道,还是同一个?
  • java命名空间java.nio.channels类pipe.sinkchannel的类成员方法: pipe.sinkchannel定义及介绍
  • 请问,FIFO的读写是否有字节数限制,PIPE_BUF如何使用?
  • java命名空间java.io类pipedinputstream的类成员方法: pipe_size定义及介绍
  • Pipes
  • java命名空间java.nio.channels类pipe的类成员方法: sink定义及介绍
  • pipe是否需要锁定的问题
  • java命名空间java.nio.channels类pipe的类成员方法: open定义及介绍
  • socket下调用write后出现:Broken pipe错误
  • 请问,pipe()这个管道建立函数在哪里实现的?
  • pipe的性能如何?主要指的是延时...
  • 如何设定pipe使用的buffer大小
  • Pipe Viewer
  • 请问关于pipe通信的问题
  • socket编程中的Broken pipe的问题
  • 关于pipe
  • linux 下pipe break 错误的修复
  • pipe不成功的原因有哪些啊?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3