• ベストアンサー

getppid()の使い方を教えてください。

中間ファイルの作成を行っています。 他の人が作ったファイルに自分が追加していく形で作成中です。 その中に、他の人が書いたソースがありコンパイルした所、 error C2065: 'getppid' : 定義されていない識別子です。 というエラーが返って来ます。 エラー行は sprintf(filename, TEMPFILE, temppath, getppid()); /* TmpFilenameGet*/ getppid()と言うのが何か良く分かりません。 ネット検索した所、『親プロセスのプロセスIDを返します。』 と言う意味らしいのですが、それでもよく分からないんです。 ご教授願えませんか?

質問者が選んだベストアンサー

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.3

エラーコードから判断するに、Visual C++をお使いと思いますが、 これのライブラリには getppidやそれに類する関数はありません。 自分のプロセスIDではなく親のを使う目的が良くわかりませんが、 > sprintf(filename, TEMPFILE, temppath, getppid()); /* TmpFilenameGet*/ コメントからしても一時ファイルの名前を作るのに使っているようですから、 この一文を mktemp (_mktemp) に置きかえてしまえばよいのではないですか? Windowsで親プロセスのIDを取得するのは面倒なので、 使わない方向に持っていったほうが良いと思います。 最後にご教授→ご教示です。 誤用にはお気をつけ下さりませ。

参考URL:
http://msdn2.microsoft.com/ja-jp/library/34wc6k1f(vs.80).aspx
noname#26266
質問者

お礼

ありがとうございます。

その他の回答 (2)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

なんというか, Unix で動いていたものを Windows で動かそうとしているような感じがありありなんですが, 中間ファイルを作りたいなら tmpnam か tmpfile を使うべきだと思います. getppid を使うのはあまり勧められないなぁ. セキュリティ上問題がありそうだし.

noname#26266
質問者

お礼

ありがとうございます。

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.1

きっと、ヘッダファイルがインクルードされていないのでしょう。 ネットを調べる前に man getppid とかするのが早道。 すると <sys/types.h> と <unistd.h> をインクルードしろと書いてある。

noname#26266
質問者

お礼

ありがとうございます。

関連するQ&A