KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
This is a C program I wrote to recursively navigate and output directories and regular files. It compiles and runs fine on my Linux machine. But on Solaris, the dit->d_type == 8 check and the other similar ones don't work because there is no d_type field. An answer I've read to this problem is to use the S_ISREG() and S_ISDIR() macros, but they don't work at all the way I have them in my code currently. I commented out the lines that work on my Linux machine. #include <sys/types.h> #include <sys/stat.h> #include <stdlib.h> #include <dirent.h> #include <stdio.h> #include <unistd.h> #include <errno.h> #include <string.h> void helper(DIR *, struct dirent *, struct stat, char *, int, char **); void dircheck(DIR *, struct dirent *, struct stat, char *, int, char **); int main(int argc, char *argv[]){ DIR *dip; struct dirent *dit; struct stat statbuf; char currentPath[FILENAME_MAX]; int depth = 0; /*Used to correctly space output*/ /*Open Current Directory*/ if((dip = opendir(".")) == NULL) return errno; /*Store Current Working Directory in currentPath*/ if((getcwd(currentPath, FILENAME_MAX)) == NULL) return errno; /*Read all items in directory*/ while((dit = readdir(dip)) != NULL){ /*Skips . and ..*/ if(strcmp(dit->d_name, ".") == 0 || strcmp(dit->d_name, "..") == 0) continue; if(stat(currentPath, &statbuf) == -1){ perror("stat"); return errno; } /*Checks if current item is of the type file (type 8) and no command line arguments if(dit->d_type == 8 && argv[1] == NULL)*/ if(S_ISREG(statbuf.st_mode) && argv[1] == NULL) printf("%s (%d bytes)\n", dit->d_name, (int)statbuf.st_size); /*If a command line argument is given, checks for filename match if(dit->d_type == 8 && argv[1] != NULL)*/ if(S_ISREG(statbuf
Tags (comma-separated)
Save Edits
Cancel