• IPC(进程间通信)


    常用IPC有:

    1:管道 

    2:命名管道(FIFO)

    3:共享存储

    4:套接字

    5:信号量

    6:消息队列

    7:信号

    管道 只允许亲缘进程间的通讯。

    命名管道(FIFO) 除了亲缘进程可以通讯外,非亲缘进程也可以通讯。

    共享内存 多个进程可以访问同一块内存空间,是最快的IPC方式。在进程间传递数据时无须任何内存的拷贝 。可以在亲缘和非亲缘的进程间使用。

    套接字 最通用的进程间通讯方式,它提供了一种让不同机器上进程间通讯方式。 消息队列 可以用在非亲缘关系的进程之间使用

    信号量(semaphore) 主要是线程间和亲缘和非亲缘的进程间的同步手段,不做数据传输之用。

    消息队列 可以用在非亲缘关系的进程之间使用

    信号(signal) 亲缘进程和非亲缘进程都可以, 也可以进程自己给自己递送信号。

    命名管道程序:

     1 int main()
     2 {
     3     pid_t pid;
     4     int fd[2];
     5     char line[100];
     6     if(pipe(fd)<0)
     7     {
     8         printf("pipe error
    ");
     9     }
    10     if((pid = fork())<0)
    11     {
    12         printf("fork error
    ");
    13     }
    14     else if(0 == pid)
    15     {
    16         close(fd[1]);
    17         read(fd[0],line,11);
    18         printf("%s",line);
    19         exit(0);
    20     }
    21     else
    22     {
    23         close(fd[0]);    
    24         write(fd[1],"hello word
    ",11);
    25     }
    26 }

    共享存储允许两个或多个进程共享一给定的存储区。因为数据不需要在客户机和服务器之间复制,所以这是最快的一种I P C。使用共享存储的唯一窍门是多个进程之间对一给定存储区的同步(互斥访问)存取。若服务器将数据放入共享存储区,则在服务器做完这一操作之前,客户机不应当去取这些数据,

    通常,信号量(无亲缘关系的进程间)被用来实现对共享存储存取的同步。

    void* mmap ( void * addr , size_t length , int prot , int flags , int fd , off_t offset ) mmap在进程地址空间创建一个映射。它既可以把一个文件映射到内存,也可以映射一块内存,实现进程间内存共享。

    一旦创建了一个共享存储段,进程就可调用shmat将其连接到它的地址空间中

  • 相关阅读:
    跨域(六)——window.name
    跨域(五)——postMessage
    跨域(四)——document.domain
    跨域(三)——JSONP
    Web安全颜色
    跨域(二)——WebSocket
    Win7下npm命令Error: ENOENT问题解决
    跨域(一)——CORS机制
    父组件传值给孙组件
    vue使用bus进行兄弟组件传值
  • 原文地址:https://www.cnblogs.com/be-m/p/4340051.html
Copyright © 2020-2023  润新知