我正在编写一个使用libusb的应用程序,而我正在处理一个涉及将设备数据写入XML文件的部分。
我已经意识到该程序可能需要使用sudo运行,因为当我尝试转移到设备时,没有足够的权限。但是,当我使用sudo运行程序时,ofstream将不再创建该文件。为什么会这样,我该如何解决?
int writeDeviceList(const char* fileName, libusb_device **devs, ssize_t deviceCount)
{
std::ofstream file;
file.open(fileName, std::ios::trunc);
if(!file)
{
//Code enters here when run with root
std::cout << "\"" << fileName << "\" file failed to open\n";
return -1;
}
file << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
file << "<USB>\n";
ssize_t i;
for(i = 0; i < deviceCount; i++)
{
if(printdev(devs[i], &file) == -1)
{
return -1;
}
}
file << "</USB>\n";
file.close();
return 0;
}
答案 0 :(得分:0)
一个原因是,如果您是运行在本地计算机上的root用户,但该文件位于远程计算机的nfs挂载上,例如你的普通用户的家庭目录。然后,本地计算机上的root将无法写入甚至打开文件。