2009-12-17 5 views
29

लिनक्स सिस्टम (या तो 32- या 64-बिट) पर pid_t, uid_t, gid_t का आकार pid_t, uid_t, और gid_t का आकार क्या है?लिनक्स

उत्तर

50
#include <stdio.h> 
#include <sys/types.h> 

int main() 
{ 
    printf("pid_t: %zu\n", sizeof(pid_t)); 
    printf("uid_t: %zu\n", sizeof(uid_t)); 
    printf("gid_t: %zu\n", sizeof(gid_t)); 
} 
संकलित करने के लिए है

संपादित करें: लोकप्रिय अनुरोध के अनुसार (और क्योंकि, वास्तविक, लोगों को इस सवाल का आ रहा है के 99% 86 या x86_64 चल रहा हो जा रहे हैं) ...

एक i686 और x86_64 (ताकि पर, 32- बिट और 64-बिट) प्रोसेसर लिनक्स> = 3.0.0 चल रहा है, जवाब है:

pid_t: 4 
uid_t: 4 
gid_t: 4 
+20

ठीक है, कोड पोर्टेबल है भले ही जवाब न हों। ;-) –

+2

उत्तर जहां तक ​​मुझे पता है सभी लिनक्स लक्ष्यों के लिए पोर्टेबल हैं। वे सभी 4. –

+8

असल में, कोड पोर्टेबल नहीं था, क्योंकि प्रारूप विनिर्देशक '% d' था, लेकिन 'sizeof' एक' size_t' देता है, जो हस्ताक्षरित नहीं है और आवश्यक रूप से 'int' का आकार नहीं है। सही पोर्टेबल प्रारूप विनिर्देशक '% zu' है। मैंने इसे ठीक कर दिया है। –

17

इंटेल आर्किटेक्चर पर, आकार /usr/include/bits/typesizes.h में परिभाषित कर रहे हैं:

#define __UID_T_TYPE   __U32_TYPE 
#define __GID_T_TYPE   __U32_TYPE 
#define __PID_T_TYPE   __S32_TYPE 

दूसरे शब्दों में, uid_t और gid_t अहस्ताक्षरित 32-बिट पूर्णांक हैं और pid_t एक हस्ताक्षरित 32-बिट पूर्णांक है। यह 32- और 64-बिट दोनों के लिए लागू होता है।

मुझे यकीन है कि क्या वे अन्य आर्किटेक्चर बेतकल्लुफ़ पर हैं के रूप में मैं किसी भी क्षण में उपलब्ध नहीं है नहीं हूँ, लेकिन निश्चित तरीका आदि एक प्रोग्राम है जो sizeof(uid_t) के उत्पादन में प्रिंट,

11

एक "पर हस्ताक्षर किए पूर्णांक प्रकार" और uid_t और gid_t केवल "के रूप में पूर्णांक प्रकार" के रूप में परिभाषित करता है standardpid_t (ताकि पोर्टेबल कोड उनके लिए किसी विशेष प्रकार नहीं मानना ​​चाहिए)।

+0

कौन सा मानक? –

+0

'type.h' के लिए मेरा मैनपेज, जो पीओएसईक्स होने का दावा करता है, कहता है कि 'uid_t' और' gid_t' पूर्णांक प्रकार हैं (हस्ताक्षरित या हस्ताक्षरित का कोई उल्लेख नहीं है), और 'pid_t' एक हस्ताक्षरित पूर्णांक प्रकार है। – ptomato

+0

@ क्रिस मैं "pid_t" के बारे में गलत था, इसलिए मैंने अपनी पोस्टिंग को सही किया। मानक "uid_t" या "gid_t" की हस्ताक्षर के बारे में कुछ भी नहीं कहता है। –