想向大家请教一个 关于 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 编辑 ]