当前位置:  技术问答>linux和unix

紧急求助——一道去年清华操作系统的unix编程题目

    来源: 互联网  发布时间:2015-01-22

    本文导语:  给出下列程序的输出结构,并说明为什么 #include "studio.h" int main(void) {    int  I;    int  IntVariableA,IntVariableB;    IntVariableA=100;    IntVariableB=200;    while((I=fork()==-1);    printf("Test...");        if(I!=0)      {...

给出下列程序的输出结构,并说明为什么
#include "studio.h"
int main(void)
{
   int  I;
   int  IntVariableA,IntVariableB;
   IntVariableA=100;
   IntVariableB=200;

   while((I=fork()==-1);
   printf("Test...");
   
   if(I!=0)
     {
      printf("It is parent process.n");
      IntVariableA+=IntVariableB;
      wait(null);
      printf("In parent: A=%d,B=%dn",IntVariableA,IntVariableB);
      printf("My child process,ID number %d exited.n",I);
      exit();
      }
   else
      {
       printf("It is child process.n");
       IntVariableB+=IntVariablea;
       printf("In child: A=%d,B=%dn",IntVariableA,IntVariableB);
      }
   printf("It is child or parent process.n");
   exit()
   }

|
#include "studio.h"     //应该是#include "stdio.h"吧
int main(void)
{
   int  I;
   int  IntVariableA,IntVariableB;
   IntVariableA=100;
   IntVariableB=200;

   while((I=fork()==-1);     //应该是   while((I=fork())==-1);
//fork函数产生一子进程,把子进程号给,再判断是否为-1。(为-1表示子进程产生出错),此句是为了一定要产生一子进程

   printf("Test...");
   
   if(I!=0)    //如果I(子进程号)不为0,表示是父进程
     {//为父进程处理部份
      printf("It is parent process.n");
      IntVariableA+=IntVariableB;
      wait(null);   //等待子进程运行结束
      printf("In parent: A=%d,B=%dn",IntVariableA,IntVariableB);
      printf("My child process,ID number %d exited.n",I);
      exit();  //结束程序
      }
   else       
      {  //为子进程处理部份
       printf("It is child process.n");
       IntVariableB+=IntVariablea;  // IntVariableB+=IntVariableA;

       printf("In child: A=%d,B=%dn",IntVariableA,IntVariableB);
      }
   printf("It is child or parent process.n");
   exit()  // exit();退出子进程
   }


输出结果:
Test...It is child process.
In child: A=100,B=300
It is child or parent process.
Test...It is parent process.
In parent: A=300,B=200
My child process,ID number 3058 exited.

最后一行的3058是子进程的进程号,每次运行不一定。

|
此程序的关键是while(I=fork()==-1);
等价:
  while(1)
   {  I=fork();/*创建子进程*/
               /*如果I!=-1
                    UNIX创建了一个子进程:
                       系统复制父进程程序文本并且创建一个同父进程一样的环境                    
                 */
      if(I!=-1)
        break;
    }
WAIT 用于同子进程同步
  IntVariableA  和  IntVariableB  用于显示


    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 求助:linux/unix网络编程
  • 紧急求助java多线程编程!!!!!!!!!!!!!
  • 求助linux下的网络编程问题
  • 新手求助KDE编程起步
  • 我的linux下无法进行console图形编程,求助!!!
  • [高分求助]------如何在linux下编程实现录音
  • linux下图形编程入门求助
  • 求助:谁有KDevelop编程的中文介绍?
  • 求助:在模块编程下,如何进行debug??
  • 在Linux的Eclipse中用C语言编程,求助
  • Solaris下编程求助
  • 大侠,求助!!LINUX下TCP套接字编程中客户端出现段错误
  • 求助!!linux下socket编程
  • [求助]请问socket编程中send()函数可以发送整形数据吗?
  • 求助shell编程
  • 关于windows xp下的jdk编程的问题!(高分求助!!)
  • 求助ftp编程高手一个问题----有关免费包libftp-5.0
  • 求助:如何在linux下编程检测网线被拔掉?
  • 求助:Linux下线程编程的问题~~~~~~~~~~~~~~~~~~~`
  • ftp port方式编程求助
  • 高分求助高分求助高分求助高分求助高分求助高分求助
  • 怎样读取HZK24S前十区的内容啊???求助求助
  • 紧急求助!紧急求助!
  • 【求助】iplanet问题,求助高手解答!
  • 菜鸟求助,solaris下计算问题求助
  • 【求助】SOS紧急求助..............极为简单的问题...跪求....
  • 高分求助啊!求助SUSE 10.0 不能上网.
  • 急急急急急急急啊,紧急求助啊!!!!!满分求助啊!!!!!!
  • 求助:linux下 vim的配置(高分求助)
  • red hat怎么安装gcc啊!总是出错,求助求助啊!!!yum源怎么改啊!!
  • 求助~~求助 ~~linux文件读写问题


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3