• 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将其连接到它的地址空间中

  • 相关阅读:
    1012 The Best Rank (25 分)(排序)
    1011. World Cup Betting (20)(查找元素)
    1009 Product of Polynomials (25 分)(模拟)
    1008 Elevator (20 分)(数学问题)
    1006 Sign In and Sign Out (25 分)(查找元素)
    1005 Spell It Right (20 分)(字符串处理)
    Kafka Connect 出现ERROR Failed to flush WorkerSourceTask{id=local-file-source-0}, timed out while wait
    flume、kafka、avro组成的消息系统
    Java23种设计模式总结【转载】
    Java编程 思维导图
  • 原文地址:https://www.cnblogs.com/be-m/p/4340051.html
Copyright © 2020-2023  润新知