Answers:
如果您知道数据类型的定义,就可以getconf
在大多数Unix系统上使用这些值。
$ getconf CHAR_BIT
8
除了在磁盘上之外,变量列表也在手册页man limits.h
以及此处定义man sysconf
。您可以使用locate limits.h
它来查找它,通常在这里:/usr/include/linux/limits.h
。
getconf
是最安全的方法,只要您说,我就在包装盒上打“官方”编译器。
getconf
并不是那么安全,除非您使用C(c89
或c99
几乎没有)选项调用C编译器。
的种类。
至少在使用gcc时,这有效:
$ cpp -dD /dev/null | grep __SIZEOF_LONG__
无论如何,为什么不编写一个C程序来做呢?您可以从外壳程序向编译器发送一个小型C程序,如下所示:
binary=$(mktemp)
cat <<\EOF | cc -o $binary -x c -
#include <stdio.h>
int main() {
printf("int=%lu bytes\n", sizeof(int));
printf("long=%lu bytes\n", sizeof(long));
}
EOF
$binary
rm $binary
该-x c
告诉编译器的语言C
,并-
从标准输入读取手段。
在我的系统上,上面打印:
int=4 bytes
long=8 bytes
在gcc和clang中测试。
是。你可以扫描/usr/include/<arch>/limits.h
例如,在我的NetBSD amd64上,/usr/include/amd64/limits.h
将显示:
#define CHAR_BIT 8 /* number of bits in a char */
#define SCHAR_MAX 0x7f /* max value for a signed char */
#define SCHAR_MIN (-0x7f-1) /* min value for a signed char */
#define UCHAR_MAX 0xff /* max value for an unsigned char */
#define CHAR_MAX 0x7f /* max value for a char */
#define CHAR_MIN (-0x7f-1) /* min value for a char */
#define USHRT_MAX 0xffff /* max value for an unsigned short */
#define SHRT_MAX 0x7fff /* max value for a short */
#define SHRT_MIN (-0x7fff-1) /* min value for a short */
#define UINT_MAX 0xffffffffU /* max value for an unsigned int */
#define INT_MAX 0x7fffffff /* max value for an int */
#define INT_MIN (-0x7fffffff-1) /* min value for an int */
#define ULONG_MAX 0xffffffffffffffffUL /* max value for an unsigned long */
#define LONG_MAX 0x7fffffffffffffffL /* max value for a long */
#define LONG_MIN (-0x7fffffffffffffffL-1) /* min value for a long */
尝试此操作以解析并输出包含引用数据类型的字符串的行:
{ shopt -s globstar; for i in /usr/include/**/*.h; do grep -HE '\b(([UL])|(UL)|())LONG|\bFLOAT|\bDOUBLE|\bINT' $i; done; }
当然,这会捕捉到其中的定义,/usr/include/limits.h
因此您将获得更多的附加信息,有时还包含值,但主要是引用设置的内容limits.h
,您可以使用getconf -a
and ulimit -a
命令方便地查看它们。