飞翔的大毛熊 发表于 2013-12-11 13:44

这题太难了,,各位高手能进来看看嘛,

如下图所示,

1.假如运行可执行文件(a.out) 前已载入配置文件"fichier"($./a.out fichier ).执行下图程序后,屏幕显示的结果是什么呢,,,,,,

2.如果去掉第13行的注释,这时管道中有什么信息?就是发生了嘛情况,,,

这高人多,求解答,先谢谢了,,,

openspace 发表于 2013-12-11 15:19

管道中传输 argv?

timespace 发表于 2013-12-11 15:41

先学下不用截图怎么贴代码

飞翔的大毛熊 发表于 2013-12-11 16:35

我个人觉得,去掉13行的注释,此时管道中神马都没有,各路高手速来围观,集思广益


openspace 发表于 2013-12-11 15:19 static/image/common/back.gif
管道中传输 argv?

飞翔的大毛熊 发表于 2013-12-11 16:37

代码如下:谢谢做答


1.int main(int argc, char *argv[]) {
2.int fd; char argument;
3.if ( argc < 2 ) { perror("Argument manquant !"), exit(1); }
4.if (pipe(fd) != 0) { perror("Pipe"); exit(1); }
5.close(0);
6.if ( dup(fd) == -1 ) { perror("Dup fd0"); exit(1); }
7.close(1);
8.if ( dup(fd) == -1 ) { perror("Dup fd1"); exit(1); }
9.if ( fork() == 0 )
10.{ sleep(1);
11.    read(fd, argument, sizeof(argument));
12.    printf("Argument recu = %s", argument);
13.    // pause();
14.    exit(0); }
15.else{ write(fd, argv, strlen(argv));
16.    printf("Argument envoye = %s", argv);
17.    exit(0); }
18.}


timespace 发表于 2013-12-11 15:41 static/image/common/back.gif
先学下不用截图怎么贴代码

井蛙夏虫 发表于 2013-12-11 19:52

屏幕肯定没有输出。
至于管道的内容,我认为什么也没有的可能性最大。
当标准输出是管道的时候是全缓冲,
而pause上面的这条输出语句输出的内容应当不足以填满缓冲区。

smallmaple 发表于 2013-12-11 23:43

本帖最后由 smallmaple 于 2013-12-12 00:45 编辑

我想得太简单了!

飞翔的大毛熊 发表于 2013-12-12 06:51

啊,屏幕没有输出吗,
我个人觉得应该输出
Argument envoye = fichier
Argument recu = fichier

大家的意见呢?

井蛙夏虫 发表于 2013-12-11 19:52 static/image/common/back.gif
屏幕肯定没有输出。
至于管道的内容,我认为什么也没有的可能性最大。
当标准输出是管道的时候是全缓冲, ...

井蛙夏虫 发表于 2013-12-12 17:48

回复 8# 飞翔的大毛熊
一般标准输出对应文件描述符1,你把标准输出打开到管道的写端,怎么还能输出到屏幕

   

飞翔的大毛熊 发表于 2013-12-12 17:55

这是老师给的题,哎,我也没办法啊,问100个人说100个结果,,这尼玛神马老师


井蛙夏虫 发表于 2013-12-12 17:48 static/image/common/back.gif
回复 8# 飞翔的大毛熊
一般标准输出对应文件描述符1,你把标准输出打开到管道的写端,怎么还能输出到屏幕 ...
页: [1] 2
查看完整版本: 这题太难了,,各位高手能进来看看嘛,