popen详解


popen详解

说明:本文题目来源于牛客网,答案分析来源个人,仅为参考

popen详解

1、请问下面的程序最后会产生多少个进程:

int main( ){ 

     int i; 

     for(i = 0; i<5;i++){ 

        int pid = fork(); 

        if(pid == 0){ 

            //do something 

        } else { 

        //do something 

        } 

        }

    // do somthing,sleep

    return 0;

}

A、5 B、10 C、15 D、32


2、若有定义 int(pt)[3];则下列说法正确的是:
A、定义了基类型为int的三个指针变量
B、定义了基类型为int的具有三个元素的指针数组pt
C、定义了一个名为
pt、具有三个元素的整型数组
D、定义了一个名为pt的指针变量,它可以指向每行有三个整数元素的二维数组


3、(不定项选择)若 a 是 float 型变量,b 是 unsigned 型变量,以下输入语句中合法的是:
A、scanf("%6.2f%d",&a,&b);
B、scanf("%f%n",&a,&b);
C、scanf("%f%3o",&a,&b);
D、scanf("%f%f",&a,&b);


答案与解析:

1 2 3
D D BC

1、答案:D。
解析:第一题考察了关于进程的基本知识。

首先,什么是进程?进程是程序的执行实体,是系统资源进行资源分配的基本单位,我们经常拿进程和线程进行对比。线程是任务调度和执行的基本单位,一个进程可以由多个线程组成。我们平时写的程序,一般都只是一个进程,除非程序员手动创建一个新的进程,比如使用fork函数(进程创建方式不止这一种)。

由fork创建的新进程被称为子进程。fork函数被调用一次,但是返回两次,一次是父进程的返回值一次是子进程的,两次返回的区别是子进程的返回值是0,父进程的返回值则是新建子进程的进程ID。这时候的子进程就会共享父进程的代码资源,拷贝一份父进程的资源,然后创建属于自己的堆栈等数据空间。也就是说,这时候子进程和父进程都会继续执行fork调用之后的指令。

说到这里,我们就可以解决第一个问题了。程序循环fork了5次,第一次只有一个父进程调用fork,创建一个子进程,这时候共有2个进程。然后第二次循环时,这两个进程分别创建一个子进程,共有4个进程。同理,3次循环有8个进程,4次有16,5次就有32个。


2、答案:D。
解析:第二题是一个基本的二级指针定义问题。

既然是定义,记住就好。

定义基类型为int的三个指针变量:intpt1,intpt2,int*pt3;

定义一个基类型为int的具有三个元素的指针数组pt:int*pt[3]

定义一个名为*pt、具有三个元素的整型数组:名字叫*pt的数组?没法定义。

定义一个名为pt的指针变量,它可以指向每行有三个整数元素的二维数组:int (*pt)[3];

所以:B和D的区别,就是*和谁在一起,和int在一起,就说明元素是指针,和变量在一起,就说明变量是指针。


3、答案:B C。

解析:第三题考察了输入输出规则。

对于浮点型和字符串%m.n含义不同。浮点型:m表示输出位数,n表示精度,也就是小数点后面几位。对于字符串,表示输出字符的个数。