簡體   English   中英

C Linux共享內存無法存儲大整數值

[英]C linux shared memory cannot store large integer value

我在編程方面還是個菜鳥,遇到了一個我自己無法解決的問題,因此我嘗試在線尋求幫助,但找不到任何解決方案。

我目前正在嘗試在Linux中創建一個程序,該程序利用共享內存在兩個程序之間傳輸整數。 我可以成功地傳輸小整數,例如50或99,但是無論何時嘗試從該段讀取,我都無法寫出大於100的值,而不能將它們更改為完全不同的隨機值。

我已經坐了好幾個小時,一直在看我的代碼,無法弄清楚。 你們中任何一個比較熟練的程序員都可以就此問題的原因給我一些建議嗎?

謝謝

這是第一個將整數testValue寫入段的程序,但是,如果測試值比100(例如150)高一點,則輸出將變為另一個值。 這樣的值通常小於100。

ps = shmPointer;
for(Count = 1; Count <= atoi(argv[1]); Count++)
    {
        *ps++ = testValue;
    }

*ps = (char)NULL;

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

對於段大小,我執行#define SHMSZ 100 ,我的shmget調用是shmid = shmget(key, SHMSZ, IPC_CREAT | 0666);

下面是另一個程序的代碼,該程序檢索存儲在段中的整數:

ps = shmPointer;

for(ps = shmPointer; *ps != (char)NULL; ps++)
{
    printf("Value: %d\n", (int)*ps)
}

printf("\n");

*shm = '*';

假設ps的類型為“ char *”,則您嘗試執行的操作將不起作用。 您不能在char中存儲任意整數(帶符號的char中只能存儲-128到+127)。 – FredK

暫無
暫無

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

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