Do pracy domowej muszę napisać program w języku C i jedną z rzeczy, które musi zrobić, to sprawdzenie, czy plik istnieje i czy jest on wykonywany przez właściciela.Używanie stat do sprawdzania, czy plik jest wykonywany w C
Używanie (stat(path[j], &sb) >= 0
Jestem w stanie sprawdzić, czy plik wskazany przez ścieżkę [j] istnieje.
Przeglądam strony man, wiele pytań i odpowiedzi na stackoverflow i kilka stron internetowych, ale nie jestem w stanie objąć głowy dokładnie, jak sprawdzić, czy plik jest wykonywalny za pomocą statystyk. Myślałem, że to będzie tak proste jak ((stat(path[j], &sb) >= 0) && (sb.st_mode > 0) && (S_IEXEC)
, ale o ile mogę powiedzieć, testując go, wydaje się zignorować fakt, że te pliki nie są wykonywalne.
Myślę, że być może stat nie działa tak, jak myślę. Zakładając, że używam statystyk, jak mogę to naprawić?
'&& (S_IEXEC)' w ogóle nie zależy od 'sb', co to ma zrobić w twoim teście? – Mat
Wyszukaj operator bitowy AND. Musisz go użyć i S_IXUSR przeciwko sb.st_mode – goji
Zabawne, że gdyby to było pytanie w Pythonie, wszyscy natychmiast [krzyczeli o tym, jak strasznie niebezpiecznie to jest] (http://stackoverflow.com/questions/82831/how-do -i-check-if-a-file-exists-using-python) ze względu na możliwy stan wyścigu, jeśli planujesz później polegać na tym wyniku. Jeśli to robisz (i ciesz się bezpiecznym utrzymaniem), możesz chcieć uzyskać blokadę pliku przed wywołaniem 'stat'. – Kos