| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 243 人关注过本帖
标题:想向大家请教一个 关于 exec 的问题
取消只看楼主 加入收藏
madfrogme
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:21
帖 子:1160
专家分:1106
注 册:2009-6-24
结帖率:98.63%
收藏
已结贴  问题点数:20 回复次数:0 
想向大家请教一个 关于 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
快速回复:想向大家请教一个 关于 exec 的问题
数据加载中...
 
   



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

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