代码之家  ›  专栏  ›  技术社区  ›  Yann rogi1609

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

  •  0
  • Yann rogi1609  · 技术社区  · 10 年前

    我正在编写一个使用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 回复  |  直到 10 年前
        1
  •  0
  •   Erik Alapää    10 年前

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