当程序使用sudo运行时,ofstream无法创建文件

时间:2014-09-12 09:03:44

标签: c++ linux sudo permission-denied ofstream

我正在编写一个使用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;
}

1 个答案:

答案 0 :(得分:0)

一个原因是,如果您是运行在本地计算机上的root用户,但该文件位于远程计算机的nfs挂载上,例如你的普通用户的家庭目录。然后,本地计算机上的root将无法写入甚至打开文件。