进程的PID的最大可能长度是多少? (64位)

时间:2011-11-11 07:26:31

标签: c

我一直在使用AIX,看到一些进程ID运行的时间长了8个......

我正在使用PID作为与另一个char *值的串联,如果你从“char视角”看它,我试图找出PID的可能长度是什么?

我查看了pid_t结构(例如t.html“> http://dvbstreamer.sourceforge.net/api/structPID_t.html),它将PID作为INT ......

在那个注释中我假设一个PID是一个“signed int”....在这种情况下什么是signed int的最大长度?

感谢您的帮助

林顿

3 个答案:

答案 0 :(得分:4)

字节大小取决于系统,应该像这样查询:

unsigned int pidLength = sizeof(pid_t);

编辑:如果您担心printf("%d", myPID);中的十进制表示的长度,我建议也查询一下。例如,snprintf函数返回如果有足够的空间,它将写入的字符数(没有空终止)。所以你可以这样做:

char tmpChar;
int representationLength = snprintf(&tmpChar, 1, "%d", myPID);
if (representationLength == -1) { handle_error(); }
char *finalString = malloc(representationLength + 1);
snprintf(finalString, representationLength + 1, "%d", myPID);

也许snprintf(NULL, 0, "%d", myPID)也可以查询长度,但Linux snprintf手册页说明了这一点:

  

关于snprintf()的返回值,SUSv2和C99相互矛盾:当使用size = 0调用snprintf()时,SUSv2规定一个小于1的未指定返回值,而C99允许str在这种情况下为NULL ,并且返回值(一如既往)为在输出字符串足够大的情况下写入的字符数。

答案 1 :(得分:1)

32位int中的最大位数为10.

64位signed int中的最大位数为19。

64位无符号整数中的最大位数为20.

我不知道AIX是否为其pid_t使用32位或64位(有符号或无符号)。

编辑:它必须被签名,因为fork可以返回-1。

答案 2 :(得分:1)

另一种方法可能是使用(int)log10(pid)+ 1.当然,您可能需要为终止空字符包含空格,但上面应该为您提供表示值所需的字符数一个字符串。