システム コール access() は、一部のファイル/ディレクトリについて、「そのようなファイルまたはディレクトリはありません」と報告します。すべてのディレクトリ/ファイルは、要求された権限を持っています。それらの所有者/グループは、以下に掲載されているプログラムの場合と同様に、私のログイン ID です。また、ファイル マネージャーは、すべてのファイル/ディレクトリを、正しい権限、所有者/グループで表示します。
具体的には、一部のサブディレクトリ/ファイルでエラーが発生します。ただし、エラーが発生した同じサブディレクトリでは、すべてのファイル (およびサブディレクトリ) がエラーなしで表示されます。
何が足りないのでしょうか?
構造体 dirent *pDirent;
int main(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;
}
答え1
access() に渡される名前は絶対である必要があります。この場合、単なる pDirent->d_name ではなく、v[1]、"/"、および pDirent->d_name の連結になります。