Как обрабатывать аргументы при unlink Системный вызов в UNIX (w / readdir) - PullRequest
0 голосов
/ 20 октября 2019

Проблема в команде rm при удалении файлов или каталога в целевом каталоге.

  1. , когда указатель направления обращается к файлам в целевом каталоге, кроме ".", "..",

  2. вызовите системный вызов unlink (поскольку в каталоге нет подкаталога),

  3. и после выхода из цикла будет очищен (я полагаю)

=> Я думаю, проблема в том, что d-> d_name в прямой структуре unlink (имя файла не содержит нулевую строку), но d_name включает в себя пустую строку

это правильное предположение? thx.

НЕ ИСПОЛЬЗУЯ FTW!

void rm_m(char **res){      // pointer array named res
        struct stat buf;    // (res[0]="rm_m", res[1] =file or directory name)
        DIR *dp;
        struct dirent *d;

        stat(res[1], &buf);
        if(buf.st_mode&S_IFREG){        //reg file
                unlink(res[1]);
        }
        else if(buf.st_mode&S_IFDIR){   //directory
                dp = opendir(res[1]);
                d = readdir(dp);
                while(d != NULL){
                        if(d->d_name[0] != '.'){
                                unlink(d->d_name);
                        } 
                        d = readdir(dp);
                }
                remove(res[1]);
        }
        return;
}
...