前提・実現したいこと
C++でシェルコマンドの結果からプロセス名のPIDを取得しようとしたとき、存在しないプロセスについて取得を試みると返った文字列の結果が文字化けしていました。どうすればPIDが存在しないことを判定できるかわからなくなってしまいました。
知りたいのは、
- この出力は実際には何が書いてあるのか
- なぜ文字化けしたのか
- 下記コードの要領で特定のプロセスの実行を判定したいとき、どう言う条件で分岐させるのが良いか
です。よろしくおねがいします。
発生している問題・エラーメッセージ
Q�L�cU Q���U Q���U Qю�dU //実行時によって微妙に変わることがありますが、概ね最初の文字がQで最後の文字がUでした。
該当のソースコード
cpp
1#include <stdio.h> 2#include <iostream> 3#include <string.h> 4int main() 5{ 6 char buffer[128]; 7 fgets(buffer, 120, popen("pidof hoge", "r")); 8 if (buffer == "") 9 { 10 std::cout << "False"; 11 } 12 else 13 { 14 std::cout 15 << buffer; 16 } 17 return 0; 18}
試したこと
上記コードのhoge
をbash
等存在するプロセス名にすると、
24183 23199 22964 22682 22492 22299 21619 14896 9217 9034 8727
のようにスペース区切りのPIDを取得できました。
補足情報(FW/ツールのバージョンなど)
コンパイラ: g++ (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0
エディタ: Visual Studio Code (RemoteSSHを使って編集)
文字コード:UTF-8(コンパイルの引数にも--input-charset=utf-8
を指定)
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。