当程序试图在/ proc中打开文件时“无法打开文件”

时间:2010-04-06 03:42:55

标签: c++ file-io error-handling

我尝试使用c程序读取文件/ proc /'pid'/ status。代码如下,即使我使用sudo运行它,提示仍然会继续抛出“无法打开文件”。如果您对如何解决此问题有任何想法,请与我们联系。谢谢

理查德

...

int main (int argc, char* argv[]) {  
  string line;  
  char* fileLoc;  
  if(argc != 2)  
  {  
     cout << "a.out file_path" << endl;  
     fileLoc = "/proc/net/dev";  
  } else {  
     sprintf(fileLoc, "/proc/%d/status", atoi(argv[1]));  
  }  
  cout<< fileLoc << endl;  

  ifstream myfile (fileLoc);  
  if (myfile.is_open())  
  {  
    while (! myfile.eof() )  
    {  
      getline (myfile,line);  
      cout << line << endl;  
    }  
    myfile.close();  
  }  

  else cout << "Unable to open file";  

  return 0;  
}  

2 个答案:

答案 0 :(得分:1)

您尚未为fileLoc

指向的char数组分配内存
char* fileLoc; // just a char pointer...pointing to some random location.
.
.
sprintf(fileLoc, "/proc/%d/status", atoi(argv[1])); 

动态分配数组并在以后释放它,或者您可以使用具有合适大小的静态数组,甚至可以更好地使用C ++ string

答案 1 :(得分:1)

避免在C ++中使用C字符串。你忘了分配这个。 stringstream将为您分配并具有sprintf功能。

int main (int argc, char* argv[]) {  
  string line;
  ostringstream fileLoc;
  if(argc != 2)  
  {  
     cout << "a.out file_path" << endl;  
     fileLoc << "/proc/net/dev";  
  } else {  
     fileLoc << "/proc/" << argv[1] << "/status";
  }  
  cout<< fileLoc.str() << endl;  

  ifstream myfile (fileLoc.str().c_str());