2011-01-05 20 views

答えて

2

bufferstaticでない限り、可能です。

+4

この回答はおそらく正しいですが、それは明らかではありません。標準では、 'snprintf'がリエントラントである必要はありません(これはスレッドセーフではないよりはるかに強力な要件です)。 glibcがリエントラントにすると、標準の要件を上回ります。 –

2

はい。

なぜあなたはできないと思いますか?グローバルはありません。

バッファは関数のローカルなので、なぜ文字列を書式化して何もしたくないのでしょうか?

+0

- snprintfの実装で静的データが使用されているかどうかはわかりませんでした。あなたの2番目の質問に答える:send()を使ってバッファをソケットに書き込む予定です。私はそれもまたリエントラントであると想定しています(私はerrnoも注意しなければなりません)。私はその前提で正しいのでしょうか? –

4

私も同じ質問をしているので、このページに行きます。ここで私は本から読んだものです:

UNIX環境での高度なプログラミング:図10.4 (中リエントラント関数の一覧ではありませんSecond Editionの

10.6

ほとんどの関数は、 )は、(a)静的データ構造を使用することが知られており、(b)mallocまたはfreeを呼び出すか、(c)標準入出力ライブラリの一部であるために欠落しています。彼らは彼らの 内部の簿記のための静的なデータ構造を使用している場合

のLinuxプログラミングインタフェース

章21.1.2

機能も非リエントラントすることができます。このような関数の最も明白な例は、 のstdioライブラリ(printf()、scanf()など)であり、バッファされたI/O用の内部データ 構造を更新します。

私はそれが実装に依存していると思います。また、実際にsnprintfをどのように使用するか(バッファは不可欠です)によって異なります。質問に対する最も安全な答えは「いいえ」であるべきです。

関連する問題