2014-09-12 2 views
0

libusb를 사용하는 응용 프로그램을 작성 중이며 장치의 데이터를 XML 파일에 기록하는 작업을하고 있습니다.ofstream이 프로그램이 sudo로 실행될 때 파일을 생성하지 못했습니다.

나는 장치에 전송하려고 할 때 충분한 권한이 없었기 때문에 프로그램을 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

['std :: perror()'] (http://en.cppreference.com/w/cpp/io/c/perror)를 선택했다고 가정하지 않습니까? – WhozCraig

+0

perror returned "Permission denied"@WhozCraig – Yann

답변

0

이유 중 하나이지만, 파일, 예를 들어 원격 시스템의 NFS 마운트,에 일반 사용자의 집 주소. 그러면 로컬 시스템의 루트가 파일을 쓰거나 열 수 없게됩니다.

+0

좋아, 어떻게 고칠 수 있니? – Yann

+0

가능하다면, 출력 파일을 root가 쓰기 권한이있는 곳, 즉 NFS 마운트가 아닌 곳에두면됩니다. –

관련 문제