列出目录并显示每个文件的详细信息。使用 c 的所有者、八进制权限和文件名
list directory and display details of each file. owner, octal permissions and filename using c
我正在尝试创建一个方法来执行一些系统调用。它应该显示每个文件的所有者和八进制代码。但不知何故我无法开始。它将登录的用户名显示为每个文件的所有者
listContents(char * dir) {
struct dirent *direntp;
DIR *dirp;
if ((dirp = opendir(dir) ) == NULL)
{
perror ("Failed to open directory");
return 1;
}
while((direntp=readdir(dirp))!=NULL) {
struct stat fileInfo;
if (stat(direntp->d_name, &fileInfo) == 0);
{
struct passwd * pInfo = getpwuid(fileInfo.st_uid);
if(pInfo!=NULL)
{
printf("owner is : %s\toctal permisions is: %o\n", pInfo->pw_name, fileInfo.st_mode);
}
}
}
while ((closedir(dirp) == -1) && (errno == EINTR)) ;
return 0;
}
你有一个错误:
if (stat(direntp->d_name, &fileInfo) == 0); {
应该是
if (stat(direntp->d_name, &fileInfo) == 0) {
但是您的版本只能在当前目录中工作,因为您使用的是 stat,其中第一个参数应该是文件的完整路径,而不仅仅是名称。
我正在添加一些修改后的代码:
list_contents (char *dir) {
struct dirent *direntp;
DIR *dirp;
char path[PATH_MAX + 1];
char fpath[PATH_MAX + 1];
if ((dirp = opendir(dir)) == NULL) {
perror ("Failed to open directory");
return 1;
}
strcpy(path, dir);
strcat(path, "/");
while (NULL != (direntp = readdir(dirp))) {
struct stat fileInfo;
strcpy(fpath, path);
strcat(fpath, direntp->d_name);
if (stat(fpath, &fileInfo) == 0) {
struct passwd * pInfo = getpwuid(fileInfo.st_uid);
if(pInfo != NULL) {
printf("%s - owner is : %s\toctal permisions are: %o\n", direntp->d_name, pInfo->pw_name, fileInfo.st_mode);
}
}
}
closedir(dirp); // edited as chux proposed
return 0;
}
我正在尝试创建一个方法来执行一些系统调用。它应该显示每个文件的所有者和八进制代码。但不知何故我无法开始。它将登录的用户名显示为每个文件的所有者
listContents(char * dir) {
struct dirent *direntp;
DIR *dirp;
if ((dirp = opendir(dir) ) == NULL)
{
perror ("Failed to open directory");
return 1;
}
while((direntp=readdir(dirp))!=NULL) {
struct stat fileInfo;
if (stat(direntp->d_name, &fileInfo) == 0);
{
struct passwd * pInfo = getpwuid(fileInfo.st_uid);
if(pInfo!=NULL)
{
printf("owner is : %s\toctal permisions is: %o\n", pInfo->pw_name, fileInfo.st_mode);
}
}
}
while ((closedir(dirp) == -1) && (errno == EINTR)) ;
return 0;
}
你有一个错误:
if (stat(direntp->d_name, &fileInfo) == 0); {
应该是
if (stat(direntp->d_name, &fileInfo) == 0) {
但是您的版本只能在当前目录中工作,因为您使用的是 stat,其中第一个参数应该是文件的完整路径,而不仅仅是名称。 我正在添加一些修改后的代码:
list_contents (char *dir) {
struct dirent *direntp;
DIR *dirp;
char path[PATH_MAX + 1];
char fpath[PATH_MAX + 1];
if ((dirp = opendir(dir)) == NULL) {
perror ("Failed to open directory");
return 1;
}
strcpy(path, dir);
strcat(path, "/");
while (NULL != (direntp = readdir(dirp))) {
struct stat fileInfo;
strcpy(fpath, path);
strcat(fpath, direntp->d_name);
if (stat(fpath, &fileInfo) == 0) {
struct passwd * pInfo = getpwuid(fileInfo.st_uid);
if(pInfo != NULL) {
printf("%s - owner is : %s\toctal permisions are: %o\n", direntp->d_name, pInfo->pw_name, fileInfo.st_mode);
}
}
}
closedir(dirp); // edited as chux proposed
return 0;
}