2011-11-11 9 views
3

私はAIXで作業していて、実行中のプロセスIDのいくつかが長さが8であることを確認しています....プロセスのPIDの最大可能長はどれくらいですか? (64ビット)

私は他のchar *値との連結としてPIDを使用しています。あなたが "char"の観点からそれを見ていたら、PIDの可能なMAXの長さはどれくらいですか?

...

を私は(例えばt.htmlための "> http://dvbstreamer.sourceforge.net/api/structPID_t.html)pid_t構造を見ていると、それはINTとしてPIDを持っていますそのノートで、私はそのような場合には署名したint型の最大長さは何である.... PIDは「署名int型」であると仮定?助けを

おかげ

リントン

+0

* "8 long" * - 8 * what * long?小数点のPID値を表す文字列の長さについて話していますか(たとえば、8374は4桁です)?また、PIDが符号付きintであると仮定しないでください。これは 'pid_t'です。これは' signed int'のtypedefかもしれません。そこ –

+0

こんにちは、うん...私は彼が文字列にPIDを変換した場合、彼は最大の長さを望んでいる...「別のchar *値との連結としてPID」PID ...のthnx –

答えて

3

サイズバイトでありますシステムに依存し、単に次のように照会する必要があります:

unsigned int pidLength = sizeof(pid_t); 

編集:あなたはprintf("%d", myPID);のように長さ10進数表現心配している場合は、私はあまりにも、それを照会示唆しています。例えば、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 manページは、この意見::だからあなたは行うことができます

が戻りのsnprintf()の値、はSUSv2とC99に関して互いに矛盾:のsnprintf()のサイズ= 0で呼び出されたときC99はstrが、この場合にNULLにすることができる、及び(いつものように)戻り値を与えながらSUSv2には、1未満の不特定の戻り値を規定文字数として出力文字列が十分に大きくなった場合に備えて書かれているはずです。

+0

の文字列表現を意味しました。 –

+0

あなたの答えを読んだ後、ちょっと混乱して質問を再読しました。私の答えを編集しました。 – DarkDust

+0

助けをいただきありがとうございます;-) –

1

32ビット整数の最大桁数は64ビット符号付き整数の桁10

最大数は19

Aの最大桁数であります64ビット符号なし整数は、pid_tため、符号付きまたは符号なし、20

AIXは32個の又は64ビットを使用する場合、私は知らないです。

編集:フォークは-1を返すことができるため、署名する必要があります。

+0

〜((pid_t)0)を無効なPIDとして定義し、符号なし64ビットタイプをpid_tとして使用することもできます... - 私たちが非常に多くのプロセスを必要とする場合に備えて私たちのOS上で;-) – alk

1

もう1つの方法は、(int)log10(pid)+ 1を使用することです。もちろん、終端ヌル文字のスペースを入れる必要があるかもしれませんが、上記の値は値を表すために必要な文字数文字列として。

関連する問題