一、选择题(每题2分,共40分)
1. 下列哪种打开文件的方式不能修改文件已有的内容( B )
[A] r+ [B] r [C] w+ [D] a+
2.以下哪种不是进程的状态( B )
[A] 运行态[B] 锁定态[C] 睡眠态[D] 停止态
3. 以读写方式打开一个已存在的标准I/O流时应指定哪个mode参数( B )三月你好的心情说说
提前批大学名单[A] r [B] r+ [C] w+ [D] a+
4. fork()的返回值不可能是( C )
[A] -1 [B] 0 [C] 1 [D] 大于10000的正整数
5. 常用来进行多任务同步的机制是( B )
[A]管道[B] 信号量[C] 信号(异步通信方式,中断机制的模拟)[D] 共享内存(本身不提供同步机制,可自行添加信号量实现同步)
盛墨兰结局信号量:解决进程\线程之间的同步与互斥问题的一种通信机制:信号量变量和这个变量的等待队列、两个原子操作(PV).
6. 下列哪个函数无法传递进程结束时的状态( A )
[A]close [B] exit [C] _exit [D] return
void exit( int status)
7. 以下哪种用法可以等待接收进程号为pid的子进程的退出状态( A ) P59
[A] waitpid(pid, &status, 0) [B] waitpid(pid, &status, WNOHANG)
[C] waitpid(-1, &status, 0) [D] waitpid(-1, &status, WNOHANG)
WNOHANG:子进程没结束,不阻塞立即返回,返回值为0。
0:阻塞父进程,直到子进程退出。
8. What kind of IPC has the highest efficiency? (B)
[A] semaphore
[B] sharedmemory
[C] fifo
[D] message queue
E signal
9. 下列对无名管道描述错误的是( C )
[A] 半双工的通信模式
[B] 有固定的读端和写端
[C] 可以使用lseek函数
[D] 只存在于内存中
10.下列对于有名管道描述错误的是( D )
[A] 可以用于互不相关的进程间
[B] 通过路径名来打开有名管道
[C] 在文件系统中可见
[D] 管道内容保存在磁盘上
11. 下列不属于用户进程对信号的响应方式的是( B )
[A] 忽略信号[B] 保存信号[C] 捕捉信号[D] 按缺省方式处理(1终止SIGINT Ctrl+c,SIGINTQUIT Ctrl+\。2暂停SIGSTOP。3停止SIGTSTP Ctrl+z.。4忽略SIGCHILD)
12. 不能被用户进程屏蔽的信号是( B )
[A] SIGINT [B] SIGSTOP/SIGKILL [C] SIGQUIT [D] SIGILL 非法指令时发出
13. 下列哪个是不带缓存的( C )
[A] stdin [B] stdout [C] stderr [D] 都不是
14. 下列不属于IPC对象的是(A )
[A] 管道[B] 共享内存[C] 消息队列[D] 信号灯
IPC对象通过它的标识符来引用和访问,这个标识符是一个非负整数,它唯一的标识了一
个IPC对象,这个IPC对象可以是消息队列或信号量或共享存储器中的任意一种类型
15. 如果键盘输入为abcdef,程序如下所示,打印结果应该是( A )
char buffer[6];
……
fgets(buffer, 6, stdin); //遇到\n 或读取了size – 1 个字符后返回.
printf(“%s”, buffer);
[A] abcde [B] abcdef [C] abcdef 后出现乱码[D] 段错误
16. 用open( )创建新文件时,若该文件存在则可以返回错误信息的参数是( B )
[A] O_CREAT (创建新文件) [B] O_EXCL [C] O_TRUNC(删除原有数据) [D] O_NOCTTY
int open( const char *pathname, int flags, int perms)
17. 下列不是用户进程的组成部分的是( D)
[A] 正文段[B] 用户数据段[C] 系统数据段[D] elf段
进程是由进程控制块、程序段、数据段三部分组成
18. 以下哪种方法无法查看进程的信息( C )
[A] ps [B] 查看/proc目录[C] kill [D] top
Linux系统中每一个进程都会有/proc文件系统下的与之对应的一个目录( init进程信息存放在/proc/1 目录下)。
19. 默认情况下,不会终止进程的信号是( D )
[A] SIGINT [B] SIGKILL [C] SIGALRM [D] SIGCHLD
20. fread()返回值的含义是( B )
[A] 读取的字节数[B] 读取的对象数[C] 缓冲区的首地址[D] 0
size_t fread (void *ptr, size_t size, size_t nmemb, FILE *stream);
二、简答题(30分)
1.请描述进程和程序的区别?(5分)
进程和程序的区别
程序是静态的,它是一些保存在磁盘上的指令的有序集合,没有任何执行的概念
进程是一个动态的概念,它是程序执行的过程,包括创建、调度和消亡
进程是一个独立的可调度的任务
进程是一个抽象实体。当系统在执行某个程序时,分配和释放的各种资源
进程是一个程序的一次执行的过程
进程是程序执行和资源管理的最小单位
2.指出静态库和共享库的区别(使用方法,对程序的影响) (5分)
静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库,因此体积较大。
动态库在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入,因此在程序运行时还需要动态库存在,因此代码体积较小。
3.写出设置信号处理函数和用户定义的信号处理函数的原型(5分)
void (*signal(int signum, void (*handler)(int)))(int);
typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);
void driver_handler(int signo);
void (*handler)(int);
handler,一个指向函数的指针,该函数有一个int参数,返回void。
T *signal(int signo, P), P = void (*handler)(int);
signal,一个函数,该函数有2个参数(signo, P),返回类型T的指针。
void (T) (int),T = signal(int signo, P)
T,一个函数,该函数有一个int参数,返回void。
4.程序代码如下,请按执行顺序写出输出结果(10分)
int main()
{ pid_t pid1,pid2;呆若木鸡成语故事
if((pid1=fork()) = = 0) //子进程处理程序
{
sleep(3);
printf(“info1 from child process_1\n”);
exit(0);
printf(“info2 from child process_1\n”);
}
else
{
if((pid2=fork()) = = 0) //子进程2
{
sleep(1);
printf(“info1 from child process_2\n”);
exit(0);
}
else
{
wait(NULL);
wait(NULL);
printf(“info1 from parent process\n”);
printf(“info2 from parent process”);
_exit(0);
}
}
info1 from child process_2
info1 from child process_1
info1 from parent process
5.列出任意四种进程间通信的方式(5分)
传统的进程间通信方式
无名管道(pipe)、有名管道(fifo)和信号(signal)
System V IPC对象
共享内存(share memory)、消息队列(message queue)和信号灯(semaphore) BSD
套接字(socket)
三、综合题(30分)
1.指出创建守护进程的步骤(5分)
P65
1) 创建子进程,父进程退出fork(),exit()
2) 在子进程中创建新会话setsid()
3) 改变当前目录为根目录chdir()外地车在北京
4) 重设文件权限掩码umask(0)
5) 关闭文件描述符close()
2.请画出Linux中进程的状态切换图(5分)
3. 用文件IO分别实现标准IO中的(r, r+, w, w+, a, a+),文件名由argv[1]传入程序.
(O_RDONL Y, O_WRONL Y, O_RDWR, O_CREA T, O_TRUNC, O_APPEND)(10分) int open (const char *pathname, int flags, int perms);
r:open(argv[1],O_RDONL Y);
r+: open (argv[1],O_RDWR);
w: open(argv[1],O_WRONL Y | O_CREAT | O_TRUNC,0666);
w+: open(argv[1],O_RDWR | O_CREAT | O_TRUNC,0666);
a: open(argv[1],O_WRONL Y | O_CREAT | O_APPEND,0666);
a+: open(argv[1],O_RDWR | O_CREAT | O_APPEND,0666);
4. 编写程序实现如下功能(10分):
reader.c 从argv[1]所指定的文件中读取内容,依次写到管道
/home/linux/myfifo中
writer.c 从管道/home/linux/myfifo中读取内容,写到argv[1]所指定
的文件中并保存
代码中可省略头文件,/home/linux/myfifo无需创建
word打开是乱码
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论