• ベストアンサー

C言語でプロセス番号を求めるには?

shなどでは、$$ で簡単に求められる自プロセスの番号ですが、 C言語ではどのようにして求められるでしょう? OSは、RedHat8で、gccコンパイラで作る単純なプログラムです。 やりたいことは、tmpファイルとして、他プロセスと異なるファイル名を 付けたいだけです。 fopen("/tmp/com.$$","w"); こんな感じです。 これも他に方法があれば、教えてください。 基本的なことで恐縮ですが、よろしくお願いします。

  • goku3
  • お礼率78% (97/123)

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

  • ベストアンサー
  • asuca
  • ベストアンサー率47% (11786/24626)
回答No.1

int getpid() /* プロセスIDを得る */ /* IDを返す */ int getppid() /* 親プロセスIDを得る */ /* IDを返す */ int getuid() /* 実ユーザIDを得る */ /* IDを返す */ です。 これでだめでしょうか?

goku3
質問者

お礼

getpid()でOKでした!! 素早いご回答ありがとうございます。帰れそうです。助かりました。

関連するQ&A

  • C言語でプロセスを処理するプログラムを考えています。

    C言語でプロセスを処理するプログラムを考えています。 popenを使ってプロセスを起動しようとしたですが、popenが未定義の関数とエラーが出てコンパイルできません。 ヘッダにstdio.hはおいてあります。 コンパイラはborlandを使用しています。 よろしくお願いします。

  • C言語でのLinux再起動方法とは?

    QNo.3555570の質問と関連しているのですが。。 「system("shutdown -r now");」で、システムを再起動する プログラムを作成しております。 しかし、別のプロセスにて無効なメモリアドレスへのアクセスを した後に上記を実行すると再起動されません。 shutdownコマンドによるログは出力されております。 不足な情報がございましたらご指摘ください。 環境&コンパイラ  RedHat 7.3 2.96-110  Kernel 2.4.18-3 on an i686  gcc 2.96  GNU Make 3.79.1

  • C言語での例外処理の検出方法とは?

    下記Linux環境にて、C言語で例外処理を検出したいのですが 何か方法は有りますでしょうか? 回答するにあたり、不足な情報がございましたらご指摘ください。 環境&コンパイラ  RedHat 7.3 2.96-110  Kernel 2.4.18-3 on an i686  gcc 2.96  GNU Make 3.79.1

  • C言語について教えてください。

    フォームに三つラジオボタンとボタン一つだけのC言語プログラムを作りたいです。複雑なものはC#で作っています。C言語にこだわる理由は、すべてのWindows上でFrameworkをインストールしなくとも動くらしいとのことです。 「厳密にはFramework不要の言語は世の中に存在しない」と言う方がいますが、非常に困惑しています。大体でいいんで、WindowsXPとWindows7でテキストファイルの処理ができれば十分です。 こんな簡単なプログラムを作るためには、どんなコンパイラーがよろしいですか? ド素人ですので、教えてください。

  • C言語のfopenについて教えてください。

    C言語のfopenについて教えてください。 ある1つのファイルをr(テキストファイル読み込みモード)でfopenしたとします。 そのファイルをfcloseする前に、同じファイルが再度rモードでfopenされても問題ないのでしょうか? 何を気にしているかと言いますと、あるプログラムであるファイルをrモードでfopenして読み込む処理があるのですが、そのプログラムを呼び出す処理が複数あります。 確率は低いと言えど、もし同時にその処理が実行された場合、rモードでfopenしているファイルにfclose前に再度rモードのfopenがされたらエラーとなってしまうのでしょうか? もし、エラーとなる場合、回避する方法がありますか? また、エラーとならない場合は、fcloseするまで次の処理が待ってしまうのでしょうか? 読み込みモードだから問題ないのかなとも思ったのですが、どなたかご存知だったら教えてください。 よろしくお願いしますm(_ _)m

  • C言語

    C言語で簡単なプログラムを作っているのですが、 「テキストファイルが存在し、かつ空のテキストファイル(開いても何も書かれていない)だと、そのテキストファイルを削除する」 というコードはどうのように書けばいいのでしょうか? 現在自分が考えているのは、 #include<stdio.h> int main(){ FILE *fp; if((fp=fopen("example.txt","r"))==NULL){ printf("file not open\n"); }else if(((fp=fopen("example.txt","r"))!=NULL)&&(fgetc(fp)==NULL)){ //「ファイルがあって、中に何も書かれていない」という条件式を書きたい// remove("example.txt"); } return 0; } 大学で講義としてC言語を習っている程度の知識です。 fopenのif文の書き方があってるかどうかもわからないんですが^^; borland c++ 5.5.1を使用しています。 よろしくお願いします。

  • c言語

    c言語について質問があります。 使っているOSはLinuxでコンパイラはgccです。 所持金を入力したら持っている紙幣と硬貨の数(1万円、5千円、2千円、1千円、5百円、100円、50円、10円、5円、1円のなかですべてもしくわ全てをつかわなくてもいいい)を推測するプログラムを設定を2つ以上考えないといけなくて、 1つ思いついた設定ははできるだけ持っている紙幣と硬貨の数が少なくなるように推測するの(高い金額のものから順番に割る)を考え付いたのですが、他が思いつきません。 なにかいい考えがあれば教えてください。 問題のなかのすべてを使わなくていいがきになるんですが もしすべて使わないとしたら設定はどんな感じなんでしょう?

  • 複数のC言語プログラムが,一つのファイルに書き込み

    2つのプログラムで一つのテキストファイルに書き込むと,エラーが起きてプログラムが停止するんじゃないかなーと思っていましたが,起きませんでした. 検証結果がまた謎であり,知識も足りず,解釈ができないので,力を貸してください. 動作環境は先に言いますと,win7のVC++2010コンパイラです. ---プログラムA FILE *fp = fopen("test.txt", "w"); while(true){ fputc('@', fp); } fclose(fp); ---end ---プログラムB FILE *fp = fopen("test.txt", "w"); while(true){ fputc('_', fp); } fclose(fp); ---end (1)Aを走らせる・・・ファイルには@がたくさん出力されていると思われる. (2)Bを走らせる・・・Aがファイルを操作しているんだから,fopen関数でエラーが出ると思ったが,出なかった.稼働してしまったので,fopenの書き込みモードによってファイルは真っ新になり,「_」が先頭から羅列され始めただろう. (3)Bを停止する・・・「_」の出力は止まっただろうが,プログラムAの方は今何をしているんだろう.元気かな (4)Aを停止する 出力結果すなわちtest.txtの内容は次のようだった. ___________・・・______[NULL][NULL][NULL]・・・[NULL][NULL]@@@@@@@・・・@@@@@@@ これについて質問があります. Q.NULLが出力されているのはどうしてか. Q.AはBが書き込んでいる間,待っていたようだ(Bを停止した後で待ってましたと言わんばかりに@が書き込まれた形跡があるから)が,これは仕様なのか.エラーが出るということを気にする必要はないのか. 余談,予備知識大歓迎です.よろしくお願い致します.

  • C言語のファイルの読み書き

    以下のようなプログラムを作成したいのですが、どうしても作成できません。 さまざまなサイトを参考にしたのですが、まったく理解できませんでした。 具体的なプログラム式をご教授願います。 よろしくおねがいします…。 1)複数の学生の情報を読み取り配列を行う struct student a [LIST_SIZE_A] 2)配列に代入した情報をファイルに書き込む fopen("…","w"); … fclose() 3)配列に代入した情報をファイルに追加する fopen("…","a"); … fclose() 4)ファイルの内容を表示する fopen("…","r")

  • C言語 メモリ?

    最近、C言語の勉強を始めているものです。 gccでコンパイルし、実行ファイルを実行すると 強制終了 と表示されます。 gdbで実行してみると、 Program terminated with signal SIGKILL, Killed. The program no longer exists. You can't do that without a process to debug. と表示されました。 プログラムの中で、二次元配列 a[10000][10000],b[10000][10000] というような大きい配列を使っているのが原因なのかなと思っていますが、どうなんでしょうか?mallocでメモリを確保したらいいのでしょうか? ソースを載せることができなく申し訳ないですが、よろしくお願いします。

専門家に質問してみよう