मैं "फोर्क()" में नया हूं, मैंने हर जगह पढ़ा है कि जब एक कांटा() को वर्तमान (कॉलिंग) प्रक्रिया की एक सटीक प्रतिलिपि कहा जाता है। अब जब मैं निम्नलिखित कोड चलाता हूं, तो दो अलग-अलग प्रक्रियाएं होनी चाहिए उनके वर्रों और कार्यों को सौंपा गया दो अलग-अलग स्मृति स्थान।फोर्क का उपयोग होने पर स्मृति को मैप किया जाता है?
#include<stdio.h>
int i=10;
int pid;
int main(){
if((pid=fork())==0){
i++;//somewhere I read that separate memory space for child is created when write is needed
printf("parent address= %p\n",&i);// this should return the address from parent's memory space
}else{
i++;
i++;
printf("child address= %p\n",&i);// this should return the address of child's memory space
}
wait(0);
return(0);
}
Why The output looks like:: child address::804a01c parent address::804a01c
क्यों दोनों पते माता-पिता के साथ ही बच्चे के लिए ही कर रहे हैं?
वे * बेहतर * समान थे। आप पॉइंटर्स को दोनों प्रक्रियाओं में स्मृति को संदर्भित करना चाहते हैं (भले ही दोनों मेमोरी भाग अलग हैं)। * वर्चुअल मेमोरी * के बारे में पढ़ें, यह आपके प्रश्न का उत्तर देगा। –
ध्यान दें कि 'i' के * मान * माता-पिता और बच्चे के बीच अलग हैं, भले ही दोनों प्रतियां समान वर्चुअल पते पर संग्रहीत हों। – markgz