Linux C 编程第13章进程间通信方式 十个问题及解答(1)

来源:互联网 发布:阿里云服务器视频教程 编辑:程序博客网 时间:2024/06/05 14:43

Linux C 编程第13章进程间通信方式 十个问题及解答(1)



1. Linux C进程间通信的目的?

  数据传输:一个进程需要将他的数据发送给另一个进程,发送的数据量在一个字节到几兆字节之间;

  共享数据:多个进程想要共享数据,一个进程对共享数据的修改,别的进程应该立刻看到;

  通知事件:一个进程需要向另一个或一组进程发送消息,通知它发生了某种事件(如进程终止前要通知父进程);

  资源共享:多个进程之间共享同样的资源。为了做到这一点,需要内核提供锁和同步机制;

  进程控制:有些进程希望完全控制另一个进程的执行,此时控制进程希望能够拦截另一个进程的所有信息和异常,并能够及时知道它的状态。

 

 

2. Linux 下进程间通信的几种主要方式?

  管道和有名管道;

信号;

消息队列;

共享内存;

信号量;

套接字。

 

 

3. 管道的特点?

  管道是半双工的,数据只能向一个方向流动,双方通信时,需要建立两个管道;

  只能用于父子进程或兄弟进程之间;

  单独构成一种独立的文件系统;

  数据的读出和写入:一个进程向管道中写的内容被管道另一端的进程读出,写入的内容每次都添加在管道缓冲区的末尾,并且每次都是从缓冲区的头部写出数据。

 

 

4. 怎样建立无名管道?

  管道用于不同进程间通信。通常先创建一个管道,再通过 fork 函数创建一个子进程,该子进程会继承父进程所创建的管道。(必须在系统调用fork()之前调用pipe(),否则子进程不会继承文件描述符)

 

 

5. 从管道中怎样读取数据?

  如果管道的写端不存在,则认为已经读到了数据的末尾,读函数返回的读出字节数为0

  当管道的写端存在时,如果请求的字节数目大于PIPE_BUF,则返回管道中现有的数据字节数,如果请求的字节数目不大于PIPE_BUF,则返回管道中现有数据字节数,或者返回请求的字节数。

  管道写端关闭后,写入的数据将一直存在,直到读出为止。

 

 

6. 怎样从管道中写入数据?

  向管道中写入数据,Linux将不保证写入的原子性,管道缓冲区一有空闲区域,写进程就会师徒向管道写入数据。如果读进程不读走管道缓冲区的数据,那么写操作将一直阻塞。

  只有当管道的读端存在时,向管道中写入数据才有意义。

 

 

7. 无名管道应用实例有哪些?

  用于shell;

  用于具有亲缘关系的进程间通信。

 

 

8. 信道常用于哪些方面?

  shell中时常会用到管道(作为输入输出的重定向),在这种应用方式下,管道的创建对于用户来说是透明的。

  用于具有亲缘关系的进程间通信,用户自己创建管道,并完成读写操作。

 

 

9. 信号的本质是什么?

  信号实在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。信号是异步的,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知道信号到底什么时候到达。

 

 

10. 信号来源是什么?

  硬件来源(按下键盘或其他硬件故障);

  软件来源与一些非法运算等操作。

阅读全文
0 0
原创粉丝点击