Yanıtlar:
Sen bakmak gerekir <limits.h>(ör içerdiği dosyaların veya bir sys/syslimits.hiçin OS X) #defineait UID_MAX.
En son işletim sistemleri (Solaris 2.x, OS X, BSD, Linux, HP-UX 11i, AIX 6) en fazla iki milyar ( 2^31-2) işleyebilir , bu yüzden bunu kabul edip 't.
login.defsbu bağlamda, gösterir UID_MAXsadece otomatik oluşturulan yeni kullanıcılar için atanacaktır en yüksek uid kontrol eder useradd.
glibc, tüm bu sistem türleri için tanımlar sağlar.
Kontrol edebilirsiniz /usr/include/bits/typesizes.h:
% grep UID_T /usr/include/bits/typesizes.h
#define __UID_T_TYPE __U32_TYPE
Sonra içine bak /usr/include/bits/types.h:
% grep '#define __U32_TYPE' /usr/include/bits/types.h
#define __U32_TYPE unsigned int
Bu, C tipini bulmanızı sağlar. Bayt cinsinden boyuta ihtiyacınız olduğundan, en iyi seçeneğiniz, typedef adını aşağıdaki spesifikasyona göre ayrıştırmaktır types.h:
We define __S<SIZE>_TYPE and __U<SIZE>_TYPE for the signed and unsigned
variants of each of the following integer types on this machine.
16 -- "natural" 16-bit type (always short)
32 -- "natural" 32-bit type (always int)
64 -- "natural" 64-bit type (long or long long)
LONG32 -- 32-bit type, traditionally long
QUAD -- 64-bit type, always long long
WORD -- natural type of __WORDSIZE bits (int or long)
LONGWORD -- type of __WORDSIZE bits, traditionally long
Yani, burada bir astar var:
% grep '#define __UID_T_TYPE' /usr/include/bits/typesizes.h | cut -f 3 | sed -r 's/__([US])([^_]*)_.*/\1 \2/'
U 32
İşte Uaraçlar unsigned(bu da olabilir Siçin signed) ve 32boyutu (yukarıda listede bakmak, ben çoğu zaman bunu zaten bayt cinsinden boyutu olduğunu varsayabiliriz, düşünmek, ancak isterseniz sizin komut tamamen taşınabilir olmasını casebu değeri açmak daha iyi olabilir ).
/usr/include/$(gcc -print-multiarch)/bits/typesizes.hveya alternatif olarak:/usr/include/$(dpkg-architecture -qDEB_HOST_MULTIARCH)/bits/typesizes.h
Bu ilginç bir soru. Bunu belirlemek için standart, taşınabilir bir yöntem olsaydı şaşırırdım.
Kullanışlı bir Linux kutusu yok, ancak idFreeBSD 8.0'daki komut sıfıra geri sarar:
# id 4294967296
uid=0(root) gid=0(wheel) groups=0(wheel),5(operator)
Bu tanımsız davranış olduğundan eminim, ama çoğu sürümü idya 65'536(16-bit UID ise) sıfıra sarın ve 4'294'967'296veya sistem sınırının ötesine geçti eğer hata dışarı bahis .
Gelen bu bağlantı soru sorulur ve cevap 2,147,483,647 bir maks değeri saklamak için 31 bit bırakarak, soru kullanımlarında imzalı uzun int sistemini belirlemek için bir deneme ve hata yöntemini kullanır.
# groupadd -g 42949672950 testgrp
# more /etc/group
testgrp:*:2147483647:
UID_MAX. Örneğin, UID için maksimum değeri bulmak içinshadow-utilskullanılan araçlar(uid_t)-1.