Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <sys/types.h>
- #include <unistd.h>
- #include <dirent.h>
- #include <string.h>
- #include <stdlib.h>
- int extensionsMatch(char *fileName, char *extension)
- {
- size_t fileNameLen = strlen(fileName),
- extensionLen = strlen(extension);
- if (fileNameLen > extensionLen && fileName[fileNameLen - extensionLen - 1] == '.')
- {
- for (size_t i = 1; i <= extensionLen; i++)
- if (extension[extensionLen - i] != fileName[fileNameLen - i])
- return 0;
- return 1;
- }
- return 0;
- }
- int main(int argc, char **argv)
- {
- DIR *currDir = NULL;
- struct dirent *currFile = NULL;
- ino_t currDescIndex = 0, parentDescIndex = 0;
- size_t filesNum = 0;
- if (argc != 2)
- {
- printf("Error: should be only one argument [file extension]\n");
- exit(EXIT_FAILURE);
- }
- printf("Search for files with extension '%s'...\n", argv[1]);
- do
- {
- if (!(currDir = opendir("./")))
- {
- printf("Error opening directory\n");
- exit(EXIT_FAILURE);
- }
- while (currFile = readdir(currDir))
- {
- if (currFile->d_name[0] == '.')
- {
- if (currFile->d_name[1] == '.')
- parentDescIndex = currFile->d_ino;
- else if (currFile->d_name[1] == '\0')
- currDescIndex = currFile->d_ino;
- }
- if (extensionsMatch(currFile->d_name, argv[1]))
- {
- printf("%s\n", currFile->d_name);
- filesNum++;
- }
- }
- chdir("..");
- closedir(currDir);
- } while (currDescIndex != parentDescIndex);
- if (!filesNum)
- printf("There's no files with this extension\n");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement