当前位置: 技术问答>linux和unix
linux c编程问题
来源: 互联网 发布时间:2016-07-22
本文导语: #include #include #include #include int main() { pid_t result; result=fork(); int newret; if(result==-1){ perror("创新子进程失败"); exit(0); } else if(result==0){ printf("返回值是:%d,这是子进程%dn",result,getpid()); newret=system("ls -l...
#include
#include
#include
#include
int main()
{
pid_t result;
result=fork();
int newret;
if(result==-1){
perror("创新子进程失败");
exit(0);
}
else if(result==0){
printf("返回值是:%d,这是子进程%dn",result,getpid());
newret=system("ls -l");
}
else{
sleep(10);
printf("返回值是:%d,这是父进程%dn",result,getpid());
newret=system("ping www.abc.com");
}
}
课本上的问题:为什么用sleep等待10秒钟?
(上机验证过没有sleep 10秒结果会不同)
另一个问题
#include
#include
#include
#include
int main()
{
pid_t result;
result=fork();
if(result==-1){
perror("error");
exit(0);
}
else if(result==0){
printf("测试终止进程的_exit函数!n");
printf("目前为子进程,这一行我们用缓存!");
_exit(0);
}
else{
printf("测试终止进程的exit函数!n");
printf("目前为父进程,这一行我们用缓存!");
exit(0);
}
}
程序执行后,书上说由_exit(0)导致printf("目前为子进程,这一行我们用缓存!")没有执行,但是我不明白printf("目前为子进程,这一行我们用缓存!")这句明明是在_exit(0)前面啊.是else if内的语句不是顺序执行的吗?
#include
#include
#include
int main()
{
pid_t result;
result=fork();
int newret;
if(result==-1){
perror("创新子进程失败");
exit(0);
}
else if(result==0){
printf("返回值是:%d,这是子进程%dn",result,getpid());
newret=system("ls -l");
}
else{
sleep(10);
printf("返回值是:%d,这是父进程%dn",result,getpid());
newret=system("ping www.abc.com");
}
}
课本上的问题:为什么用sleep等待10秒钟?
(上机验证过没有sleep 10秒结果会不同)
另一个问题
#include
#include
#include
#include
int main()
{
pid_t result;
result=fork();
if(result==-1){
perror("error");
exit(0);
}
else if(result==0){
printf("测试终止进程的_exit函数!n");
printf("目前为子进程,这一行我们用缓存!");
_exit(0);
}
else{
printf("测试终止进程的exit函数!n");
printf("目前为父进程,这一行我们用缓存!");
exit(0);
}
}
程序执行后,书上说由_exit(0)导致printf("目前为子进程,这一行我们用缓存!")没有执行,但是我不明白printf("目前为子进程,这一行我们用缓存!")这句明明是在_exit(0)前面啊.是else if内的语句不是顺序执行的吗?
|
fork()先返回父进程还是先返回子进程不确定,睡眠10秒确保了先把子进程里面的语句执行完毕。
_exit()用来立刻结束目前进程的执行, _exit()不会处理标准I/O 缓冲区。
_exit()用来立刻结束目前进程的执行, _exit()不会处理标准I/O 缓冲区。