Advertisement
Guest User

MyFind3

a guest
Apr 1st, 2020
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.14 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <sys/types.h>
  5. #include <sys/stat.h>
  6. #include <unistd.h>
  7. #include <dirent.h>
  8. #include <pwd.h> // necesar pentru functia getpwuid
  9. #include <grp.h> // necesar pentru functia getgrgid
  10. #include <limits.h> // necesar pentru PATH_MAX
  11.  
  12. void cauta(char *cale);
  13.  
  14. int main(int argc, char **argv)
  15. {
  16. struct stat st;
  17.  
  18. if (argc < 2)
  19. {
  20. printf("Introdu numele directorului in care vrei sa stergi link-urile sym nefolositoare !\n");
  21. exit(1);
  22. }
  23.  
  24. if (0 != stat(argv[1], &st))
  25. {
  26. fprintf(stderr, "Eroare la stat pentru %s .\t", ".");
  27. perror("Cauza este");
  28. exit(2);
  29. }
  30.  
  31. cauta(".");
  32. }
  33.  
  34. int isFolder(char *cale);
  35.  
  36. void cauta(char *cale)
  37. {
  38. DIR *dir;
  39. struct stat st;
  40. struct dirent *de;
  41. char caleNoua[PATH_MAX];
  42. int verifica;
  43.  
  44. verifica = isFolder(cale);
  45.  
  46. if (verifica == 0)
  47. {
  48. return;
  49. }
  50. else
  51. {
  52. if (NULL == (dir = opendir(cale)))
  53. {
  54. printf("Eroare deschidere director %s .\n", cale);
  55. return;
  56. }
  57. else
  58. {
  59. while (NULL != (de = readdir(dir)))
  60. {
  61. if (strcmp(de->d_name, ".") && strcmp(de->d_name, ".."))
  62. {
  63. sprintf(caleNoua, "%s/%s", cale, de->d_name);
  64.  
  65. if (lstat(caleNoua, &st) != 0)
  66. printf("Eroare la lstat pentru %s.\n", caleNoua);
  67. else
  68. {
  69. int ac = access(caleNoua, F_OK);
  70.  
  71. if (ac == -1 && ((st.st_mode & __S_IFMT) == __S_IFLNK))
  72. unlink(caleNoua);
  73. }
  74. cauta(caleNoua);
  75. }
  76. }
  77. }
  78. }
  79. }
  80.  
  81. int isFolder(char *cale)
  82. {
  83. int ok = 0;
  84. struct stat st;
  85.  
  86. if (stat(cale, &st) != 0)
  87. {
  88. printf("Eroare la stat pentru %s . \n", cale);
  89. return 0;
  90. }
  91.  
  92. if ((st.st_mode & __S_IFMT) == __S_IFDIR)
  93. ok = 1;
  94.  
  95. return ok;
  96. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement