關於shmget( )中的size參數

我們生活周遭存在太多太多的 embedded system ,過去 embedded system 有專屬的 OS,現在 linux 也可以應用在嵌入式環境,不過本版將廣泛討論所有嵌入式系統不只 linux 喔,歡迎有這方面經驗或有興趣的朋友一同進來討論。

版主: chester

關於shmget( )中的size參數

文章hillvskobe » 週四 5月 29, 2008 3:04 pm

在linux的share memory中,shmget(key_t key, int size, int shmflg)是用來配置共享記憶體的api

其中的size參數是用來指定欲分配的共享內存大小,但我發現若我程式寫成

#define SHMKEY (key_t)7890

int main( void ) {
int shmid = shmget( SHMKEY, 1000, 0666|IPC_CREAT );

則我的size參數若大於1000就會產生shmget: Invalid argument,但若是小於等於1000就能成功執行,


但若是我把程式寫成

int shm_id,i;
key_t key;
char* name = "/dev/shm/myshm2";
key = ftok(name,0);
if(key == -1)
perror("ftok error");
shm_id = shmget(key,4096,IPC_CREAT);
if(shm_id == -1)
{
perror("shmget error");
return;
}

則我的size參數能夠大於1000,但當size大於8192時就又會產生shmget: Invalid argument


有前輩知道我該怎麼寫才能讓size能夠不受限嗎?(當然是在SHMMAX的限制內),因為我可能會需要配置一塊不小的共享記憶體,謝謝!
hillvskobe
可愛的小學生
可愛的小學生
 
文章: 12
註冊時間: 週五 3月 28, 2008 11:15 am

文章訪客 » 週五 5月 30, 2008 7:43 am

create key 時 supplied 的 project_id 必定不可以為0.

另, check 一下 size 是否 exceed 系統上的 shmmax 的大小.
訪客
 


回到 embedded system

誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 1 位訪客