ठीक है, सबसे पहले, मुझे पूरा यकीन नहीं है कि आप क्या करने की कोशिश कर रहे हैं - आपने कहा कि आपको यूआईडी प्राप्त करने की आवश्यकता है, लेकिन Getpwuid यूआईडी के आधार पर अन्य जानकारी देखने के लिए है। क्या आप शायद getpwnam चाहते हैं, जो उपयोगकर्ता नाम के आधार पर दिखता है? और फिर आपको किसी अन्य फ़ंक्शन के लिए यूआईडी का उपयोग करने की आवश्यकता है?
किसी भी मामले में, जो कुछ भी मैं नीचे कहता हूं वह दोनों getpwnam और getpwuid पर लागू होता है - उपयोगकर्ता नाम तर्क के लिए केवल यूआईडी तर्क को स्वैप करें।
आपने अपने दस्तावेज़ को थोड़ा सा मिश्रित कर लिया है। आदमी पृष्ठ से एक लगभग-बोली:
struct passwd *getpwuid(uid_t uid);
int getpwuid_r(uid_t uid, struct passwd *pwbuf, char *buf, size_t buflen, struct passwd **pwbufp);
getpwuid() फ़ंक्शन एक संरचना पासवर्ड डेटाबेस है कि यूजर आईडी uid मैचों में रिकॉर्ड की टूट-आउट क्षेत्रों युक्त करने के लिए एक सूचक देता है।
getpwuid_r() फ़ंक्शन एक ही जानकारी प्राप्त करता है, लेकिन pwbuf द्वारा इंगित स्थान में पुनर्प्राप्त पासवाइड संरचना को संग्रहीत करता है।
ऐसा लगता है कि आप बस थोड़ा सामान्य रूप में संकेत पर फजी कर रहे हैं।
struct passwd * my_passwd;
my_passwd = getpwuid(uid);
// or:
// my_passwd = getpwnam(username);
if (my_passwd == NULL) {
// the lookup failed - handle the error!
} else {
// the lookup succeeded - do your thing
printf("User name: %s\n", my_passwd->pw_name);
printf("User password: %s\n", my_passwd->pw_passwd);
...
}
ध्यान दें कि इस मामले में आप सूचक के लिए स्मृति को आबंटित करने की जरूरत नहीं है: हालांकि, अगर आप इस काम के लिए यह की तरह अपने उद्देश्यों के लिए सरल संस्करण ठीक हो सकता है लगता है के लिए बहुत ज्यादा चिंता की जरूरत नहीं है , क्योंकि getpwuid आवंटित स्मृति और संग्रहीत जानकारी के साथ संरचना में एक सूचक देता है।
संरचना की पूर्ण परिभाषा (अन्य सदस्यों के नाम) मैन पेज में है।
दूसरा रूप है, getpwuid_r, और अधिक सावधान त्रुटि हैंडलिंग और स्मृति प्रबंधन के लिए बेहतर है, लेकिन अगर तुम सब करने की जरूरत है एक त्वरित देखने है, यह ठीक होना चाहिए।
अच्छा, मैं getpwuid इस्तेमाल किया है, और आप getpwuid_r इस्तेमाल किया। उम्मीद है कि ओपी की तलाश इन जवाबों में से एक है! – Cascabel