我正在使用Fanotify示例代码来处理文件打开和关闭事件。在 handle_events() 函数中,我被称为我的函数 checkFileIsExecutable()。调用函数后,我的系统挂起,需要硬重启。我正在提供用于检查可执行文件的功能。我添加了我的挂起代码作为参考,请检查它并帮助我解决这个问题。
checkFileIsExecutable(const char *filepath)
{
string data;
FILE* stream;
char buffer[64];
char res[64];
if(sFileName.empty())
{
return "error";
}
string cmd("file ");
cmd.append(filepath);
cout<< "Going to execute cmd: "<< cmd.c_str()) <<endl;
stream = popen(cmd.c_str(), "r"); //here my code is hangs
if(stream)
{
while(!feof(stream))
{
if(fgets(buffer, 64, stream) != NULL)
{
data.append(buffer);
}
}
pclose(stream);
}
strcpy(res, data.c_str());
if(0 == strcasecmp(res, "executable"))
{
cout << "File is executable\n" << endl;
return true;
}
return false;
}
错误代码:
要执行 cmd:file /root/Test/access 挂起....