gcc-exec()函数族疑问,输出不是预料的结果

问题描述

exec()函数族疑问,输出不是预料的结果

有两个C源代码文件test.c和file.c

test.c代码如下:
#include
#include
#include
int main(int argc, char argv[])
{
if(0==fork())
{
printf("a");
execlp("./file",(char
)NULL);
}
else
{ wait(NULL);
printf("b);
}

return 0;

}

file.c代码如下:
#include

int main(void)
{
printf("c");
return 0;
}

我先gcc file.c -o file
然后gcc test.c -o test
输出bc
但是将test.c中的printf("a");改为printf("an");之后就输出abc;
我的疑问就在于:为什么加了n之后,就能输出a,而没有加n就不能输出a
???实在不解!!!

解决方案

因为你没加/n的时候输出的a被b覆盖了

解决方案二:

这就叫做行缓存的机制

解决方案三:

n 会刷新缓冲区,使得a输出,不然不会,使用fflsuh(stdout);好像也可以,。。

解决方案四:

解决方案五:

时间: 2024-10-26 13:09:47

gcc-exec()函数族疑问,输出不是预料的结果的相关文章

Linux多任务编程(三) exec函数族及其基础实验

exec函数族 函数族说明 fork() 函数用于创建一个新的子进程,该子进程几乎复制了父进程的全 部内容,但是,这个新创建的子进程如何执行呢?exec 函数族就提供了一个在进程中启动另一个程序执行的 方法.它可以根据指定的文件名或目录名找到可执行文件,并用它来取代原调用进程的数据段.代码段和堆栈 段,在执行完之后,原调用进程的内容除了进程号外,其他全部被新的进程替换了.另外,这里的可执行文件 既可以是二进制文件,也可以是Linux下任何可执行的脚本文件. 在 Linux 中使用exec函数族主

php for循环使用exec怎么只能输出第一次结果

问题描述 php for循环使用exec怎么只能输出第一次结果 例如 <?php exec("dir",$out,$status); //exec("123",$out); var_dump($out); <?php exec("dir",$out,$status); exec("123",$out); var_dump($out); 输出的结果是一致的 解决方案 Map的传统输出和使用增强for循环的输出Map的

Linux中用于进程控制的exec函数族

1.简介 在Linux中,并不存在exec()函数,exec指的是一组函数,一共有6个,分别是: #include <unistd.h> extern char **environ; int execl(const char *path, const char *arg, ...); int execlp(const char *file, const char *arg, ...); int execle(const char *path, const char *arg, ..., cha

asp.net-shtml exec指令的一些疑问

问题描述 shtml exec指令的一些疑问 我在iis上运行shtml 提示没有为 #EXEC 调用启用 CMD 选项 可我明明在注册表里加入了SSIEnableCmdDirective=1:而且我试了下 include指令都是可以的 就是exec不行 求大神帮忙看看 解决方案 你打开这个 相关文章 sql-一个SQL批处理中执行两个exec指令,两个exec不能共享各自产生的临时表 成员函数-c++中关于类中的函数一些疑问 arm指令,B指令的疑问 gcc-exec()函数族疑问,输出不是预

fork和exec函数

#include<unistd.h> pid_t fork(void); 返回:在子进程中为0,在父进程中为子进程IO,若出错则为-1 fork最困难之处在于调用它一次,它却返回两次.它在调用进程(称为父进程)中返回一次,返回值是新派生进程(称为子进程)的进程ID号:在子进程中又返回一次,返回值为0.因此,返回值本身告知当前进程是子进程还是父进程. fork在子进程返回0而不是父进程的进程ID的原因在于:任何子进程只有一个父进程,而子进程总是可以通过getppid取得父进程的进程ID.相反,父

Linux下Fork与Exec使用

一.引言 对于没有接触过Unix/Linux操作系统的人来说,fork是最难理解的概念之一:它执行一次却返回两个值.fork函数是Unix系统最杰出的成就之一,它是七十年代UNIX早期的开发者经过长期在理论和实践上的艰苦探索后取得的成果,一方面,它使操作系统在进程管理上付出了最小的代价,另一方面,又为程序员提供了一个简洁明了的多进程方法.与DOS和早期的Windows不同,Unix/Linux系统是真正实现多任务操作的系统,可以说,不使用多进程编程,就不能算是真正的Linux环境下编程. 多线程

linux基础命令(20) find命令之exec

find是我们很常用的一个Linux命令,但是我们一般查找出来的并不仅仅是看看而已,还会有进一步的操作,这个时候exec的 作用就显现出来了. exec解释: -exec  参数后面跟的是command命令,它的终止是以;为结束标志的,所以 这句命令后面的分号是不可缺少的,考虑到各个系统中分号会有不同的意义,所以前面加反斜杠. {}   花括号代 表前面find查找出来的文件名. 使用find时,只要把想要的操作写在一个文件里,就可以用exec来配合find查找,很方便的.在有些操作系统中只允许

gcc编译选项总结

常用编译选项 [plain] view plain copy print? #--------------------------------------------------------------------------------   [介绍]       gcc and g++分别是gnu的c & c++编译器 gcc/g++在执行编译工作的时候,总共需要4步       1.预处理,生成.i的文件[预处理器cpp]    2.将预处理后的文件不转换成汇编语言,生成文件.s[编译器eg

linux进程之fork 和 exec函数

---恢复内容开始--- fork函数 该函数是unix中派生新进程的唯一方法. #include <unistd.h> pid_t   fork(void); 返回: (调用它一次, 它返回 两次 , 它在调用进程(称为父进程)中返回一次, 返回值是新派生进程(称为子进程)的进程ID号 在子进程又返回一次,返回值为0. 因此,返回值本身告知当前进程是子进程还是父进程) 在子进程中为0, 在父进程中为子进程ID, 若出错则为-1: fork有两个典型的用法: 1.一个进程创建一个自身的副本,这