0
我正在寫家庭作業的HTTP服務器,我想確保我正確地使用共享內存。下面是相關的東西摘要:叉子共享引用和清理內存進程
struct my_struct{
int num_kids;
...
}
int main(arg stuff){
...
struct mystruct *shared_data;
// shmget & shmat here
shared_data = (struct mystruct *) shared_memory;
...
while(mainloop){
...
if(incoming_connection)
if(!fork())
childstuff(shared_data);
}
...
while(shared_data->num_kids > 0)
sleep(1);
// shmdt & shmctl here
}
void childstuff(struct mystruct *shared){
shared->num_kids++;
...
shared->num_kids--;
exit(0);
}
問題
1)將childstuff()能夠正確地訪問共享內存?
2)我需要調用shmdt()的孩子?
3)將調用在孩子亂了共享內存的exit(),而不是_exit()?我知道exit()在調用_exit()之前會清理一些_exit()不會調用的東西,但我不確定exit()會清除多餘的東西(除了刷新I/O緩衝區之外)。
您應該只在子進程中調用_exit()。每個main應該至多有一個exit()調用,並且這幾乎總是發生在父進程中。 – rasmus 2012-02-14 21:43:51
所以絕對在孩子中使用_exit()而不是exit()?好的,謝謝rasmus。 – 2012-02-14 22:41:57
沒錯。如果你想了解更多信息,請看[這裏](http://www.unixguide.net/unix/programming/1.1.3.shtml)。 – rasmus 2012-02-14 22:52:03