こんにちは、私は_popenを使用してWindowsコマンドを実行しようとしました。_popenウィンドウを使用するときの問題
同じコードをC++ビルダーのvcl形式で実行します。popen return null pointer?
VC++
std::string exec(const char* cmd) {
char buffer[128];
std::string result = "";
FILE* pipe = _popen(cmd, "r");
if (!pipe) throw std::runtime_error("popen() failed!");
try {
while (!feof(pipe)) {
if (fgets(buffer, 128, pipe) != NULL)
result += buffer;
}
}
catch (...) {
_pclose(pipe);
throw;
}
_pclose(pipe);
return result;
}
C++ Builderの
_popen
状態の
void __fastcall TForm2::btn_adb_readInfoClick(TObject *Sender) {
const char* cmd = "D:\\adb\\adb.exe devices";
char buffer[128];
std::string result = "";
FILE* pipe = _popen(cmd, "r"); // always null
char* er = strerror(errno);
try
{
if (!pipe) throw std::runtime_error("popen() failed!");
while (!feof(pipe)) {
if (fgets(buffer, 128, pipe) != NULL)
result += buffer;
}
}
catch (std::exception &ex) {
_pclose(pipe);
throw;
}
_pclose(pipe);
}
'_popen()'に失敗した直後の 'errno'の値は何ですか? –
あなたの問題とは無関係ですが、「なぜwhile(!feof(file))」が常に間違っているのですか?](http://stackoverflow.com/questions/5431941/why-is-while-feof-file-always -wrong) –
@JohnZwinckのerrornoは9(「不正なファイル番号」である) – user1965804