视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
04-IO进程测试题(含答案)
2025-09-27 23:22:15 责编:小OO
文档
一、选择题(每题2分,共40分)

1. 下列哪种打开文件的方式不能修改文件已有的内容 ( B )

   [A]  r+         [B]  r        [C]  w+          [D]  a+

2.  以下哪种不是进程的状态 ( B ) 

 运行态 锁定态 睡眠态 停止态

3. 以读写方式打开一个已存在的标准I/O流时应指定哪个mode参数(  B )

[       [C] w+        [D]  a+

 4. fork()的返回值不可能是( C )

   [A] -1             [B] 0             [C] 1            [D] 大于10000的正整数

 5. 常用来进行多任务同步的机制是( B )

 管道 [B] 信号量    信号(异步通信方式,中断机制的模拟)  ] 共享内存(本身不提供同步机制,可自行添加信号量 实现同步)  

 信号量:解决进程\线程之间的同步与互斥问题的一种通信机制:信号量变量和这个变量的等待队列、两个原子操作(PV).

 

 6. 下列哪个函数无法传递进程结束时的状态 ( A )

 [A]close         [B] exit          [C] _exit       [D] return

  void exit( int status)

 7. 以下哪种用法可以等待接收进程号为pid的子进程的退出状态 (  A ) P59

 [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 )

 半双工的通信模式

[B] 有固定的读端和写端

[C] 可以使用lseek函数

[D] 只存在于内存中  

 10.下列对于有名管道描述错误的是 ( D )

[A] 可以用于互不相关的进程间

[B] 通过路径名来打开有名管道

[C] 在文件系统中可见

 [D] 管道内容保存在磁盘上

 11. 下列不属于用户进程对信号的响应方式的是 ( B )

 [A] 忽略信号 保存信号 捕捉信号 按缺省方式处理(  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    ]  都不是

 14. 下列不属于IPC对象的是 (A )  

 管道 [B] 共享内存 消息队列 信号灯

IPC对象通过它的标识符来引用和访问,这个标识符是一个非负整数,它唯一的标识了一个IPC对象,这个IPC对象可以是消息队列或信号量或共享存储器中的任意一种类型

 15. 如果键盘输入为abcdef,程序如下所示,打印结果应该是( A ) 

 char  buffer[6];

 ……

   //遇到\\n 或 读取了size – 1 个字符后返回.

 “%s”, buffer);

   [A]  abcde       [B] abcdef     [C] abcdef 后出现乱码 段错误

 16. 用open( )创建新文件时,若该文件存在则可以返回错误信息的参数是 ( B )

  (创建新文件)     [B] O_EXCL      [C] O_TRUNC(删除原有数据)  

int open( const char *pathname, int flags, int perms)

 17. 下列不是用户进程的组成部分的是( D  )

 [A] 正文段    [B] 用户数据段  系统数据段 段

进程是由 进程控制块、程序段、数据段 三部分组成

 18. 以下哪种方法无法查看进程的信息 ( C )

    [A] ps         [B] 查看/proc目录 ]

 Linux系统中每一个进程都会有/proc文件系统下的与之对应的一个目录( init进程信息存放在/proc/1 目录下)。

 19. 默认情况下,不会终止进程的信号是 ( D )

   [A] SIGINT        [B] SIGKILL         [C] SIGALRM        [D]  SIGCHLD

20. fread()返回值的含义是 ( B )

 [A] 读取的字节数 读取的对象数 缓冲区的首地址

 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;

   //子进程处理程序

{

 “info1 from child process_1\\n”);

 “info2 from child process_1\\n”); 

}

else

{

  if((pid2=fork()) = = 0)   //子进程2

  {

 “info1 from child process_2\\n”);

  }

  else

  {

 “info1 from parent process\\n”);

 “info2 from parent process”);

  }

}  

    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()

 在子进程中创建新会话  

3) 改变当前目录为根目录  

4) 重设文件权限掩码    (0)

 关闭文件描述符  

2.请画出Linux中进程的状态切换图(5分)

 用文件IO分别实现标准IO中的(r, r+, w, w+, a, a+),文件名由argv[1]传入程序.

  (O_RDONLY, O_WRONLY, O_RDWR, O_CREAT, O_TRUNC, O_APPEND)(10分)

 int open (const char *pathname, int flags, int perms);

r:  open(argv[1],O_RDONLY);

w+:  open(argv[1],O_RDWR | O_CREAT | O_TRUNC,0666);

a:  open(argv[1],O_WRONLY | O_CREAT | O_APPEND,0666);

a+:  open(argv[1],O_RDWR | O_CREAT | O_APPEND,0666);

4.  编写程序实现如下功能(10分):

r从argv[1]所指定的文件中读取内容,依次写到管道

/home/linux/myfifo中

w从管道/home/linux/myfifo中读取内容,写到argv[1]所指定

的文件中并保存

代码中可省略头文件,/home/linux/myfifo无需创建

Read.c

int main(int argc, const char *argv[])

{

 

 

  open("/home/linux/myfifo",O_WRONLY)) < 0)

 

 

 fd_src = open(argv[1],O_RDONLY)) < 0)

 

 

 while((bytes = read(fd_src,buf,32)) > 0)

  write(fd,buf,bytes);

}

Write.c

int main(int argc, const char *argv[])

{

 

 

 open("/home/linux/myfifo",O_RDONLY)) < 0)

 

 

 fd_dest = open(argv[1],O_WRONLY | O_CREAT | O_TRUNC,0666)) < 0)

 

 

 while((bytes = read(fd,buf,32)) > 0)

  write(fd_dest,buf, bytes);

}下载本文

显示全文
专题