A chamada do sistema access() relata: "Esse arquivo ou diretório não existe", para alguns arquivos/diretórios. Todos os diretórios/arquivos possuem as permissões solicitadas. Seu proprietário/grupo é meu ID de login, assim como o programa postado abaixo. Além disso, o gerenciador de arquivos mostra todos os arquivos/diretórios com permissões corretas, proprietário/grupo.
Especificamente, para alguns subdiretórios/arquivos, recebo o erro. Mas para os mesmos subdiretórios em que obtive erro, todos os arquivos (e subdiretórios) são exibidos sem erros.
O que estou perdendo, por favor?
struct dirent *pDirent;
int principal(int c, char** v) {
DIR *pDir = opendir(v[1]);
if (!pDir) {
cout << "Could not open: " << v[1] << endl;
return 0;
}
while ((pDirent = readdir(pDir)) != NULL) {
if (pDirent->d_name[0] == '.') continue;
if (pDirent->d_type == DT_DIR) {
if (access(pDirent->d_name, X_OK)) {
cout << pDirent->d_name << " Error: " << dec << errno << ' ' << strerror(errno) << endl;
}
else cout << pDirent->d_name << endl;
}
else if (pDirent->d_type == DT_REG) {
if (access(pDirent->d_name, R_OK | W_OK)) {
cout << pDirent->d_name << " Error: " << dec << errno << ' ' << strerror(errno) << endl;
}
else cout << pDirent->d_name << endl;
}
else continue;
}
return 0;
}
Responder1
O nome passado para access() deve ser absoluto. Neste caso, será a concatenação de v[1], "/" e pDirent->d_name em vez de apenas pDirent->d_name.