簡體   English   中英

只需將一個整數存儲在共享內存段中:C

[英]Simply storing an integer in a shared memory segment: C

我只是想在兩個進程之間共享一個整數,但是內存段已在程序1中初始化,並在程序4中使用。這是程序1中的初始化:

shmid = shmget(key, sizeof(int*), 0666 | IPC_CREAT);
int *data = (int *)shmat(shmid, (void*)0,0);

在這里,我得到了“從不同大小的整數強制轉換為指針”的警告。 哎呀。

我假設很簡單,但是我對IPC的使用非常熟悉。 還有c中的許多其他內容。

然后將其傳遞給另一個程序:

snprintf(shmarg, sizeof(shmarg), "%n", data);
pid_t pid3 = run_cmd4("/home/tropix/hw11-4", shmarg, semarg, pipe_from_p2_2, pipe_to_p5_2);

雖然不確定如何在另一側訪問它。 我如何在程序4中找回int?

可以肯定的是,您缺少定義shmat()的標頭,因此編譯器猜測shmat返回一個int(而不是指針)。

在這里,我得到了“從不同大小的整數強制轉換為指針”的警告。 哎呀。

嘗試使用NULL而不是(void*)0

然后將其傳遞給另一個程序:

snprintf(shmarg, sizeof(shmarg), "%n", data);
pid_t pid3 = run_cmd4("/home/tropix/hw11-4", shmarg,
                      semarg, pipe_from_p2_2, pipe_to_p5_2); 

雖然不確定如何在另一側訪問它。 我如何在程序4中找回int?

除非共享內存區域恰好在另一個程序中的完全相同的虛擬內存地址處加載,否則指針本身是沒有用的:您甚至可能不想嘗試安排該地址,而是讓另一個程序(hw11- 4)加載共享內存段,並讓OS選擇虛擬內存地址,然后只需在int那個地址查看即可。 因此, hw11-4需要傳遞相同的共享內存密鑰(例如,作為命令行參數),並且自身使用shmget打開並獲取密鑰,然后shmat將共享內存段映射到內存中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM