C
1void search(){ 2 char cmdline[80]; 3 char buf[180]; 4 int i = 0; 5 6 sprintf(cmdline, "cat /proc/%d/status | grep SigBlk", getpid()); 7 printf("$ %s\n", cmdline); 8 system(cmdline); 9 10 FILE *ret = popen(cmdline, "r"); 11 fgets(buf, 180, ret); 12 printf("%s", buf); 13 pclose(ret); 14}
ん〜〜。
ところが結果が一致しません。
$ cat /proc/10161/status | grep SigBlk SigBlk: 0000000000010000 SigBlk: 0000000000000000
下の結果、シグナルセットがうまく取得できていません。
なぜでしょうか?
どこか足りませんかね??
教えてください。
Linux 64bit Debian系 gccです。
参考サイト
C言語のsystem関数などで質問です
[C言語] system関数の結果取得を簡易に行う
ファイルに一度格納するのは、実行の際に余分なファイルが生成されるので今回はパスです。
「追記」___________________________________
C
1void search(){ 2 char cmdline[80]; 3 char buf[180]; 4 int i = 0; 5 6 FILE *ret = popen(cmdline, "r"); 7 fgets(buf, 180, ret); 8 printf("%s", buf); 9 pclose(ret); 10 11 sprintf(cmdline, "cat /proc/%d/status | grep SigBlk", getpid()); 12 printf("$ %s\n", cmdline); 13 system(cmdline);
入れ替えてみると・・・結果が全く異なるものになります。
sh: 1: @4��N: not found 000000000000000000000000111111110000000000000000000000000000000000000000000000000000000000000000 $ cat /proc/18381/status | grep SigBlk SigBlk: 0000000000010000
??
ああ〜〜。
すいません。当たり前ですね。
sprintfだけは入れ替えてはいけませんね。
結果はかわりませんでした。
SigBlk: 0000000000000000 $ cat /proc/21147/status | grep SigBlk SigBlk: 0000000000010000
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/08/04 08:59
2017/08/04 11:13
2017/08/04 11:34