资源描述
一、选择题(每题2 分,共 40 分)1. 下列哪种打开文件的方式不能修改文件已有的内容( B )A r+B rC w+D a+2. 以下哪种不是进程的状态( B )A 运行态B 锁定态C 睡眠态D 停止态3. 以读写方式打开一个已存在的标准I/O 流时应指定哪个mode 参数 ( B )A rB r+C w+D a+4. fork()的返回值不可能是(C)C 1D 大于 10000 的正整数A -1B 05. 常用来进行多任务同步的机制是( B )A 管道B 信号量C 信号 (异步通信方式, 中断机制的模拟) D共享内存(本身不提供同步机制,可自行添加信号量实现同步 )信号量:解决进程线程之间的同步与互斥问题的一种通信机制: 信号量变量和这个变量等待队列 、 两个原子操作(PV) .6. 下列哪个函数无法传递进程结束时的状态AcloseB exitvoid exit( int status)7. 以下哪种用法可以等待接收进程号为A waitpid(pid, &status, 0)C waitpid(-1, &status, 0)( A )C _exitD returnpid 的子进程的退出状态( A ) P59B waitpid(pid, &status, WNOHANG) D waitpid(-1, &status, WNOHANG)0。WNOHANG:子进程没结束,不阻塞立即返回,返回值为 0:阻塞父进程,直到子进程退出。8 . What kind of IPC has the highest efficiency ( B)A semaphoreB sharedmemoryC fifoD message queueE signal9 . 下列对无名管道描述错误的是( C )A 半双工的通信模式B 有固定的读端和写端C 可以使用 lseek 函数D 只存在于内存中10 .下列对于有名管道描述错误的是( D )A 可以用于互不相关的进程间B 通过路径名来打开有名管道C在文件系统中可见D管道内容保存在磁盘上11 .下列不属于用户进程对信号的响应方式的是(B )A忽略信号B保存信号C捕捉信号D按缺省方式处理(1终止 SIGINT Ctrl+c, SIGINTQUIT 。 2 暂停 SIGSTOP 3 停止 SIGTSTPCtrl+z.。4 忽略 SIGCHILD12 .不能被用户进程屏蔽的信号是(B )A SIGINTB SIGSTOPSIGKILLC SIGQUITD SIGILL 非法指令时发出13 .下列哪个是不带缓存的(C )A stdinB stdoutC stderrD 都不是14 .下列不属于IPC对象白是(A )A管道B共享内存C消息队列D信号灯IPC对象通过它的标识符来引用和访问,这个标识符是一个非负整数,它唯一的标识了一个IPC对象,这个IPC对象可以是消息队列或信号量或共享存储器中的任意一种类型15 .如果键盘输入为abcdef,程序如下所示,打印结果应该是 (A )char buffer6;fgets(buffer, 6, stdin); printf( %s, buffer);A abcde B abcdef C abcdef 后出现乱码 D 段错误16 .用open()创建新文件时,若该文件存在则可以返回错误信息的参数是(B )A O_CREAT创建新文件)B O_EXCLC O_TRUNC娜J 除原有数据)DO_NOCTTYint open( const char pathname, int flags, int perms)17 .下列不是用户进程白组成部分的是(D )A正文段B用户数据段C系统数据段D elf段进程是由 进程控制块、程序段、数据段三部分组成18 .以下哪种方法无法查看进程的信息(C )A psB查看 /proc 目录C killD topLinux系统中每一个进程都会有/proc文件系统下的与之对应的一个目录(init进程信息存放在/proc/1目录下)。19 .默认情况下,不会终止进程的信号是(D )A SIGINTB SIGKILLC SIGALRMD SIGCHLD20 . fread()返回值的含义是(B )A读取的字节数B读取的对象数C缓冲区的首地址D 0size_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(intsigno,P), P=void(*handler)( int);signal, 一个函数,该函数有 2个参数(signo,P),返回类型T的指针。void(T)(int), T=signal(intsigno,P)T, 一个函数,该函数有一个 int参数,返回void。4.程序代码如下,请按执行顺序写出输出结果(10分)int main() pid_t pid1,pid2;0)if(pid1=fork()进程状态图*运行态schedule(l时间片到拥有CPU$1理edu炊口 iptil 必 0MGCONT停止愈用文件IO分别实现标准IO中的(r, r+, w, w+, a, a+),文件名由argv1传入程序.(O_RDONLYO_WRONLYO_RDWR, O_CREAT, O_TRUNC, O_APPEND)的 int open (const char pathname, int flags, int perms);r :r+:w:w+:a:a+:open (argv1,O_RDONLY ;open (argv1,O_RDWR);open(argv1,O_WRONLY | O_CREAT | O_TRUNC,0666);open(argv1,O_RDWR | O_CREAT | O_TRUNC,0666);open(argv1,O_WRONLY | O_CREAT | O_APPEND,0666);open(argv1,O_RDWR | O_CREAT | O_APPEND,0666);4.编写程序实现如下功能(10分):从argv1所指定的文件中读取内容,依次写到管道/home/linux/myfifo 中从管道/home/linux/myfifo中读取内容,写到 argv1所指定的文件中并保存代码中可省略头文件,/home/linux/myfifo 无需创建int main(int argc, const char *argv) int fd,fd_src;char buf32;int bytes;if(argc 2)printf(Usage %s src_filen,argv0); return -1;if(fd = open(/home/linux/myfifo,O_WRONLY ) 0) perror(fail to open);return -1;if(fd_src = open(argv1,O_RDONLY) 0)write(fd,buf,bytes);close(fd);close(fd_src);return 0;int main(int argc, const char *argv)int fd,fd_dest;char buf32;int bytes;if(argc 2) printf(Usage %s dest_filen,argv0);return -1;if(fd = open(/home/linux/myfifo,O_RDONLY) ) 0) perror(fail to open);return -1;if(fd_dest = open(argv1,O_WRONLY | O_CREAT | O_TRUNC,0666) 0) write(fd_dest,buf, bytes);close(fd);close(fd_dest);return 0;
展开阅读全文