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表示精度,也就是小数点后面几位。对于字符串,表示输出字符的个数。