Добрый день. Недавно я столкнулся со следующей проблемой: имеется программа prog1, в которой исполняется код (упрощенно, но смысл понятен)
int commandExecute(string command,string* ret){
string d;
char s[1000];
FILE* f=popen(command.c_str(),"r");
while(fgets(s,1000,f)!=0){
ret->append(&s[0]);
}
pclose(f);
if(ret->size()==0){
return -1;
}
return 0;
}
int main(){
string ret;
commandExecute("mount /dev/sdb1 /home/user/MP",&ret);
printf(ret.c_str());
ret="";
commandExecute("/usr/bin/prog0 /home/user/MP",&ret);
ret="";
commandExecute("umount /dev/sdb1",&ret);
return 0;
}
Но хотелось бы исполнять prog1 от имени обычного юзера. Для этого написан демон, который через named pipe получает команду и выполняет:
int commandExecute(string command,string* ret){
string d;
char s[1000];
FILE* f=popen(command.c_str(),"r");
while(fgets(s,1000,f)!=0){
ret->append(&s[0]);
}
pclose(f);
if(ret->size()==0){
return -1;
}
return 0;
}
......
commandExecute("/usr/bin/prog1",&ret);
......
При этом все работает, как и было задумано. За исключением того, что во время работы prog0 раздел /dev/sdb1 не виден ни в mtab ни в выводе mount, а так же его содержимое не видно в точке монтирования /home/user/MP.
А вот, собственно и вопрос- чем можно объяснить такое поведение mount?