用mmap函式進行兩個無血緣關系行程之間的通信時,資料是否只能讀取一次?
———以下是read行程代碼————-
int main(int argc, char *argv[])
{
int fd = open("temp", O_RDWR | O_CREAT, 0664); ftruncate(fd, 4096); int len = lseek(fd, 0, SEEK_END); void* ptr = mmap(NULL, len, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
if(ptr == MAP_FAILED)
{ perror("mmap"); exit(1);
} while(1)
{ sleep(1); printf("%s\n", (char*)ptr+1024);
} // 釋放
int ret = munmap(ptr, len);
if(ret == -1)
{ perror("munmap"); exit(1);
} return 0;
}
——————以下是write行程代碼—————-
void* ptr = mmap(NULL, 4096, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
if(ptr == MAP_FAILED)
{
perror("mmap");
exit(1);
}
while(1)
{ char*p = (char*)ptr; p += 1024;
strcpy(p, "hello parent, i am your 朋友!!!\n");
sleep(2);
}
// 釋放
int ret = munmap(ptr, 4096);
if(ret == -1)
{
perror("munmap");
exit(1);
}
return 0;
輸出時會輸出一行空白一行hello parent, i am your 朋友!!!
為什么會輸出空白呢?在ptr+1024位置寫了的資料,讀一次之后怎么不見了?還望大佬幫忙解惑。
uj5u.com熱心網友回復:
求解惑求解惑
uj5u.com熱心網友回復:
有沒有大佬幫忙看一下轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/117340.html
標籤:C++ 語言
上一篇:求教解答一個關于編碼問題,重謝
