/* showdir.c */ #include #include #include #include #include #include int main(int argc,char *argv[]) { DIR *dir; struct dirent *dent; struct stat st; char *directory_name = "."; char file_name[120]; if(argc > 1) directory_name = argv[1]; if((dir = opendir(directory_name)) == NULL) { perror("Cannot open directory"); exit(1); } while(dent = readdir(dir)) { printf("%s\n",dent->d_name); sprintf(file_name,"%s/%s", directory_name,dent->d_name); if(stat(file_name,&st) < 0) { perror("Cannot get file status"); errno = 0; continue; } printf(" A"); if(S_ISLNK(st.st_mode)) printf(" symbolic link"); if(S_ISREG(st.st_mode)) printf(" regular file"); if(S_ISDIR(st.st_mode)) printf(" directory"); if(S_ISCHR(st.st_mode)) printf(" character device"); if(S_ISBLK(st.st_mode)) printf(" block device"); if(S_ISFIFO(st.st_mode)) printf(" fifo"); if(S_ISSOCK(st.st_mode)) printf(" socket"); printf("\n"); printf(" Owner group: %d user: %d\n", st.st_gid,st.st_uid); printf(" File size in bytes: %d\n",st.st_size); printf(" Accessed: %s",ctime(&st.st_atime)); printf(" Modified: %s",ctime(&st.st_mtime)); errno = 0; } if(errno != 0) perror("Cannot read directory entry"); closedir(dir); exit(0); }