2014-10-22 63 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