| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 243 人关注过本帖
标题:想向大家请教一个 关于 exec 的问题
只看楼主 加入收藏
madfrogme
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:21
帖 子:1160
专家分:1106
注 册:2009-6-24
结帖率:98.63%
收藏
已结贴  问题点数:20 回复次数:2 
想向大家请教一个 关于 exec 的问题
有这样一段代码
程序代码:
void exectest(void) {
      
       int i;
       
        printf("The quick brown fox jumped over ");
         
        if((i = execl("/bin/echo","echo", "the ", "lazy", "dogs.", (char *)NULL)) == -1)
           
            perror("execl");
         
        return;
}



当调用这个函数的时候 这只狐狸貌似跑的不够快

没有被打印出来 结果只有

the lazy dog

书上的解释是
“ The standard I/O lib ray, of which printf is a part, buffers its output,

and any partially fully last buffer is automatically flushed when the process exits.

But the process didn't exit before excel was called, and the buffer, being in the user-data segment,

got overlaid before it could be flushed.“

为了解决这个问题只要在 int i 那句下面加一个

setbuf(stdout, NULL);

就可以了!

我想问的是 为什么

The quick brown fox jumped over 这句话会被覆盖

进程在调用execl 之前并没有结束,所以不输出那句话,哪知却被覆盖,什么是 fully buffer??

调用execl算是fork() 了一个进程吧,只是这种情况
 
父和子共享地址空间,它们不是应该是 copy-on-write这种方式(需要做修改就先复制一块内存)工作的吗?

可能我说的很根本不在点, 希望被指点


[ 本帖最后由 madfrogme 于 2012-4-26 19:52 编辑 ]
2012-04-26 19:33
lonmaor
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:郑州
等 级:版主
威 望:75
帖 子:2637
专家分:6423
注 册:2007-11-27
收藏
得分:20 
函数名: setbuf   
功 能: 把缓冲区与流相联   
用 法: void setbuf(FILE *steam, char *buf);   
说明:setbuf函数具有打开和关闭缓冲机制。为了带缓冲进行I/O,参数buf必须指向一个长度为BUFSIZ(定义在stdio.h头文件中)的缓冲区。通常在此之后该流就是全缓冲的,但是如果该流与一个终端设备相关,那么某些系统也可以将其设置为行缓冲。为了关闭缓冲,可以将buf参数设置为NULL。
类似于getchar()和getch()的关系吧。c的标准输出是输出到缓冲区,只有缓冲区满了或者遇到换行符时才会输出到屏幕。关闭缓冲区之后,就即读即显了。

从不知道到知道,到知道自己不知道,成长的道路上脚步深深浅浅
2012-04-26 21:45
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
exec 系列的函数不 fork 进程,它是把当前的进程替换成新进程。之后我想你再看书上的解释就应该觉得非常清楚了。
2012-07-16 11:24
快速回复:想向大家请教一个 关于 exec 的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.047622 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved