linux 进程间通信机制(IPC机制)一总览

1.功效:进程间通信机制(Inter Process
Communication,IPC),那一个IPC机制的存在使UNIX在过程通信领域手段非凡丰裕,也使得程序员在开发一个由六个过程协作的职责组成的系统时,可以应用多种办法。

P2670 扫雷游戏

2.分类:

题材叙述

扫雷游戏是一款相当经文的单机小游戏。在n行m列的雷区中有一部分格子含有地雷(称之为地雷格),其他格子不含地雷(称之为非地雷格)。玩家翻开一个非地雷格时,该格将晤面世一个数字——提醒周围格子中有稍许个是地雷格。游戏的目的是在不翻出任哪个地点雷格的条件下,找出富有的非地雷格。

近日交由n行m列的雷区中的地雷分布,要求测算出每个非地雷格周围的地雷格数。

注:一个格子的方圆格子包括其上、下、左、右、左上、右上、左下、右下三个方向上与之直接相邻的格子。

(1)音信传递

输入输出格式

输入格式:

 

输入文件首先行是用一个空格隔开的六个整数n和m,分别代表雷区的行数和列数。

接下去n行,每行m个字符,描述了雷区中的地雷分布境况。字符’*’表示相应格子是地雷格,字符’?’表示相应格子是非地雷格。相邻字符之间无分隔符。

 

输出格式:

 

输出文件包含n行,每行m个字符,描述整个雷区。用’*’表示地雷格,用周围的地雷个数表示非地雷格。相邻字符之间无分隔符。

 

(2)信号量

输入输出样例

输入样例#1:

3 3
*??
???
?*?

输出样例#1:

*10
221
1*1

输入样例#2:

2 3
?*?
*??

输出样例#2:

2*1
*21

(3)共享存储

说明

对于 100%的数据, 1≤n≤100, 1≤m≤100。

#include <cstdio>
#include <cstring>
using namespace std;
int n,m,i,j,s[1000][1000],l=1;
char a[1000][1000];
int main()
{
    scanf("%d %d",&n,&m);
    for(i=1;i<=n;i++)
        scanf("%s",&a[i]);
    for(i=1;i<=n;i++)
    {
        for(j=0;j<m;j++)
        {
            if(a[i][j]=='*')
            {
                s[i-1][j-1]++;
                s[i-1][j]++;
                s[i-1][j+1]++;
                s[i][j-1]++;
                s[i][j+1]++;
                s[i+1][j-1]++;
                s[i+1][j]++;
                s[i+1][j+1]++;
            }
        }
    }
    for(i=1;i<=n;i++)
    {
        for(j=0;j<m;j++)
        {
            if(a[i][j]=='*')
                printf("*");
            else
                printf("%d",s[i][j]);
        }
        puts("");
    }
    return 0;
}

 

澳门美高梅手机网站,3.机制:

(1)管道
(PIPE):管道实际是用于进程间通信的一段共享内存,创造管道的过程称为管道服务器,连接受一个管道的进程为管道客户机。一个进程在向管道写入数据后,另一经过就可以从管道的另一端将其读取出来。

(2)命名管道(FIFO):命名管道是一种独特类型的文件,它在系统中以文件模式存在。这样制伏了管道的流弊,他可以允许尚未亲缘关系的过程间通信。

(3)信号
(signal):信号机制是unix系统中最为古老的长河之间的通信机制,用于一个或多少个经过之间传递异步信号。

(4)信息队列(Message queues):

音讯队列是基础地址空间中的内部链表,通过linux内核在挨家挨户进程一向传送内容,信息顺序地发送到音信队列中,并以二种不同的点子从队列中拿到,每个音信队列可以用IPC标识符唯一地展开分辨。内核中的信息队列是因此IPC的标识符来区别,不同的音讯队列直接是互为独立的。每个音讯队列中的音讯,又构成一个独自的链表。音信队列制伏了信号承载音信量少,管道只好承载无格式字符流。

(5)信号量(Semaphore):号量是一种计数器,用于控制对六个过程共享的资源拓展的拜会。它们平日被当作一个锁机制,在某个进程正在对特定的资源开展操作时,信号量可以防范另一个历程去访问它。 

(6)共享内存(Share Memory):

共享内存是在多少个经过之间共享内存区域的一种进程间的通信情势,由IPC为经过创建的一个奇异地址范围,它将现出在该过程的地点空间(这里的地方空间具体是哪位地方?)中。其他进程可以将同样段共享内存连接到自己的地点空间中。所有进程都能够访问共享内存中的地点,就恍如它们是malloc分配的如出一辙。尽管一个历程向共享内存中写入了数量,所做的改动将即刻被其他进程看到。 

(7)套接字
(soket):套接字机制不仅可以单机的不同进程通信,而且使得跨网机器间进程可以通信。

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注