मैं एक साझा स्मृति खंड में keys
को shm_open
और mmap
का उपयोग कर मैं सिर्फ एक सूचक छड़ी कर सकते हैं fork()
'घ प्रक्रियाओं के बीच एक char **keys
सरणी की तरह कुछ साझा करना चाहते हैं या मैं सभी डेटा की प्रतिलिपि करने की क्या ज़रूरत है, तो साझा स्मृति खंड में keys
में?शेयरिंग के बीच एकाधिक काँटेदार प्रक्रियाओं
उत्तर
आप जिस डेटा को साझा करना चाहते हैं वह साझा सेगमेंट में होना चाहिए। इसका मतलब यह है कि दोनों पॉइंटर्स और तारों को साझा स्मृति में होना चाहिए।
पॉइंटर्स समेत कुछ साझा करना बोझिल हो सकता है। ऐसा इसलिए है क्योंकि mmap गारंटी नहीं देता है कि दिए गए मैपिंग आवश्यक पते में समाप्त हो जाएंगे।
आप अभी भी दो तरीकों से ऐसा कर सकते हैं। सबसे पहले, आप एमएमएपी के साथ अपनी किस्मत आजमा सकते हैं और उम्मीद करते हैं कि गतिशील लिंकर आपके पसंदीदा पते पर कुछ लोड नहीं करता है।
दूसरी विधि सापेक्ष पॉइंटर्स का उपयोग करना है। एक सूचक के अंदर एक सूचक को संग्रहीत करने के बजाय, सूचक के अंदर, आप सूचक के पते और स्ट्रिंग के पते के बीच का अंतर संग्रहीत करते हैं। इसलिए जैसा:
char **keys= mmap(NULL, ...);
char *keydata= (char*) keys + npointers * sizeof(char*);
strcpy(keydata, firstring);
keys[0]= (char*) (keydata - (char*) &keys[0]);
keydata+= strlen(firststring)+1;
आप अन्य प्रक्रिया से स्ट्रिंग का उपयोग करना चाहते हैं, आप रिवर्स कार्य करें:
char **keys= mmap(NULL, ...);
char *str= (char*) (&keys[0]) + (ptrdiff_t) keys[0];
यह थोड़ा बोझिल है, लेकिन यह क्या mmap रिटर्न की परवाह किए बिना काम करता है।
- 1. रूबी - काँटेदार प्रक्रियाओं
- 2. सी ++ एकाधिक प्रक्रियाओं के बीच सिंगल क्लास ऑब्जेक्ट साझा करना
- 3. ट्विटर पर एंड्रॉइड शेयरिंग
- 4. विभिन्न प्रक्रियाओं के बीच उपज
- 5. एकाधिक प्रक्रियाओं पर फ़ाइलें
- 6. पायथन प्रक्रियाओं के बीच साझा स्मृति
- 7. संग्रहित प्रक्रियाओं और विस्तारित संग्रहीत प्रक्रियाओं के बीच अंतर
- 8. शेयरिंग डेटा
- 9. एकाधिक प्रक्रियाओं से पाइथन लॉगिंग
- 10. एकाधिक resque कार्यकर्ताओं अतिरिक्त प्रक्रियाओं
- 11. आरडीएमए मेमोरी शेयरिंग
- 12. स्वतंत्र प्रक्रियाओं के बीच सॉकेट हैंडल स्थानांतरण
- 13. Node.js - प्रक्रियाओं के बीच शेयर सॉकेट
- 14. पाइथन प्रक्रियाओं के बीच लॉक साझा करना
- 15. रूबी प्रक्रियाओं के बीच साझा परिवर्तनीय
- 16. असंबद्ध प्रक्रियाओं के बीच futex साझा करें
- 17. विभिन्न प्रक्रियाओं के बीच एचडीसी साझा करना
- 18. शेयरिंग, आईओएस
- 19. शेयरिंग रूबी और PHP
- 20. क्र्रेडेंशियल के साथ क्रॉस ओरिजिनल रिसोर्स शेयरिंग
- 21. एकाधिक कतार श्रोताओं एकाधिक प्रक्रियाओं पर एक ही नौकरी चलाएंगे
- 22. पायथन मल्टीप्रोसेसिंग: मैं एकाधिक प्रक्रियाओं के बीच एक dict कैसे साझा करूं?
- 23. कांटा() - एकाधिक प्रक्रियाओं और सिस्टम कॉल
- 24. पायथन कार्यकर्ता प्रक्रियाओं के पूल के बीच क्या अंतर है और केवल कई प्रक्रियाओं को चला रहा है?
- 25. NPM स्थापित करने और काँटेदार GitHub रेपो
- 26. एकाधिक सर्वरों के बीच संचार
- 27. दो प्रक्रियाओं के बीच पाइप के साथ पूर्णांक कैसे भेजें!
- 28. शेयरिंग वीडियो PHAsset UIActivityController
- 29. शेयरिंग उपयोगिताओं मॉड्यूल
- 30. शेयरिंग पाठ ACTION_SEND