2014-10-22 65 views
-2

我真的很新的linux操作系统。有人可以说如何用linux做这项工作。我不问C代码。很难理解它。谢谢
1.第一个程序使用shmget()创建共享内存区域并将其映射到其地址空间。然后它将“Hello”写入该共享内存区域。然后等待共享内存区域中的第一个字节变成*。
2.第二个程序应该在第一个程序之后开始。它将由第一个程序创建的共享内存区域映射到其地址空间并读取该字符串并将其打印到终端。然后它将共享内存区域的第一个字节更改为*。适用于IPC的shmget linux的

+2

还有,你试过吗?它是如何工作的?它怎么没用?你能更具体地说明你遇到什么问题吗?您*已*阅读涉及的系统调用的手册页面?你*有*查找和搜索其他例子(有很多)? – 2014-10-22 04:48:42

+0

是的,我读过很多这些。第一个程序和第二个程序意味着他们必须在单独的c程序中吗?或者它是指同一个C程序中的两个进程? – 2014-10-22 04:52:13

+1

那么,这个作业提到了第一个和第二个“程序”,而不是“过程”。 – 2014-10-22 05:15:03

回答

0

我认为这是你在找什么。

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <sys/shm.h> 

#define SHSIZE 100 

int main(){ 

    int shmid; 
    char *shm; 

    shmid = shmget(9876, SHSIZE, IPC_CREAT | 0660); 
    shm = shmat(shmid, NULL, 0); 
    memcpy(shm, "Hello", 5); 

    while(*shm != '*'){ 
    sleep(1); 
    } 

return 0; 
} 

而且客户端:

#include <stdio.h> 
#include <sys/shm.h> 

#define SHSIZE 100 

int main(){ 
    int shmid; 
    char *shm,*s; 

    shmid = shmget(9876, SHSIZE, IPC_CREAT | 0660); 
    shm = shmat(shmid, NULL, 0); 

    for(s = shm; *s != 0; s++){ 
    printf("%c", *s); 
    } 
    printf("\n"); 

    *shm = '*'; 

return 0; 
} 
0

所以基本上你问如何使用共享内存在两个程序之间交换数据。这是另一种形式的IPC或进程间通信。

请参阅此链接的视频教程!

https://www.youtube.com/watch?v=IFRbX8u6lB0

+1

尽管这个链接可能回答这个问题,但最好在这里包含答案的基本部分,并提供参考链接。如果链接页面更改,则仅链接答案可能会失效。 – 2014-10-22 07:08:11