Generowanie błędu zapisu w pakiecie testowym jest proste, pisząc pod numer /dev/full
. Czy istnieje dobra technika generowania błędu odczytu? Obecnie używam LD_PRELOAD do zastąpienia read
, ale wydaje się to zbyt skomplikowane i nieprzenośne (nie że/dev/full jest przenośne ...).Generowanie błędu odczytu
Odpowiedz
Oprócz czytania z katalogu (jak wspomniano w poprzedniej odpowiedzi) można spróbować odczytać /proc/self/mem
dostać błąd (to powinien dostać ci EIO
w systemie Linux). Aby uzyskać wyjaśnienie, zobacz: https://unix.stackexchange.com/a/6302
Dobra sztuczka, ale pamiętaj, że '/ proc/self/mem' jest dobre tylko jeśli czytasz od początku pliku. Jeśli program szuka najpierw, może przypadkowo trafić do strefy zmapowanej. – Gilles
Zgodnie z instrukcją (OS X) read (2), read (2) wygeneruje błąd, jeśli "[a] n zostanie podjęta próba odczytania katalogu." Możesz więc otworzyć (2) katalog (upewnij się, że prot nie pozwala na pisanie, a to spowoduje błąd), a następnie spróbuj go odczytać. Wygląda na to, że wymieniony jest jedyny błąd, który może wystąpić w "normalnych" okolicznościach (tj. Bez robienia czegoś takiego, jak celowe złamanie struktury FILE *).
Przypuszczam, że mówisz o błędach odczytu (2) w języku C lub czymś podobnym, ale nawet w języku wyższego poziomu możesz być w stanie otworzyć katalog i spróbować go odczytać (chociaż Po prostu wypróbowałem to w Pythonie i jest zbyt inteligentne, aby otworzyć katalog ...)
Równie dobrze można przekazać niedozwolony wskaźnik jako bufor do odczytu, który zwróci wartość -EFAULT. coś takiego:
read(fd, (char *)0, cout);
Dzięki Suzuki
Nie wygeneruje to błędu odczytu (EINVAL), ale podczas odczytu bufor znajduje się poza dostępną przestrzenią adresową (EFAULT). Ale według człowieka 2 przeczytane powinno być możliwe dotarcie do EINVAL z niewielkimi modyfikacjami. Ale pytanie brzmi: "jak dostać się do EINVAL bez modyfikowania kodu, ale tworzenia opakowania, które będzie emulować wszystkie interesujące sytuacje awaryjne". – jpe
Rzeczywiście kod nie powinien być modyfikowany, a proces musi pomyślnie otworzyć plik, wykonać wiele operacji we/wy (zarówno odczyt, jak i zapis), ale następnie należy wykonać pewne operacje odczytu, aby zakończyć się niepowodzeniem. Można to zrobić przez przesłonięcie odczytu i implementacji prostego licznika, aby operacja N-ta zakończyła się niepowodzeniem, ale byłoby miło zrobić coś ze skryptu powłoki podobnego do: 'kill -STOP $ pid; plik chmod 000; zabić -CONT $ pid'.Metoda otrzymywania błędu zapisu w podobnych warunkach byłaby miła, ponieważ zapis do/dev/full kończy się niepowodzeniem przy pierwszym zapisie. –
Podejście, które działa na wszystkich głównych unices byłoby wdrożyć mały system plików FUSE. EIO jest domyślnym kodem błędu, gdy twój sterownik systemu plików przestrzeni użytkownika robi coś złego, więc jest łatwy do osiągnięcia. Oba powiązania: Perl i Python zawierają przykłady, aby rozpocząć, możesz szybko napisać system plików, który w większości odzwierciedla istniejące pliki, ale wstrzykuje EIO w dokładnie wybranych miejscach.
Istnieje taki system plików: petardfs (article), nie wiem, jak dobrze działa po wyjęciu z pudełka.
Och, +1: petardfs jest wyraźnie właściwą rzeczą do zrobienia. –
- 1. Railsy Script/generowanie błędu
- 2. Sitecore Workbox Generowanie niepoprawnego błędu
- 3. C# BindingList tylko do odczytu błędu
- 4. Generowanie błędu czasu łącza dla przestarzałych funkcji
- 5. W skanowania błędu EOF podczas odczytu pliku CSV
- 6. Linux: obsługa błędu segmentacji i generowanie zrzutu pamięci
- 7. Błąd odczytu z png.class
- 8. Generowanie kodu HDF5 C
- 9. Kanał "tylko do odczytu" tylko do odczytu
- 10. Różnica jednorazowych odczytu vs brudny odczytu
- 11. Maksymalna głębokość odczytu głębokości odczytu WCF
- 12. Generowanie pliku Excel z HTML
- 13. Generowanie macierzy/używanie zewnętrznego
- 14. Generowanie funkcji
- 15. Nie można utworzyć wystąpienia błędu klasy błędu
- 16. Zastępowanie abstrakcyjnej właściwości tylko do odczytu dla odczytu/zapisu Właściwość
- 17. LINQ do odczytu XML
- 18. Historia odczytu przeglądarki Androida
- 19. Definiowanie własnego makro odczytu
- 20. Właściwości tylko do odczytu
- 21. Zredukuj operację odczytu Datastore
- 22. Błąd odczytu w kassierze
- 23. Wymuszenie odczytu zmiennej lotnej
- 24. JMX hasło odczytu problem
- 25. Wejście odczytu konsoli Groovy
- 26. odczytu tryb zapisu pyton
- 27. java odczytu/zapisu konstrukcji
- 28. Szybkość odczytu SharedPreferences
- 29. Źródła odczytu kodu
- 30. Happstack wyświetla plik odczytu
Po prostu myśl, ale co powiesz na czytanie z pliku z ustawieniami perms na 000? –
@Loadmaster To spowoduje błąd 'open' zamiast błędu' read'. –
Czy szukasz EINVAL? – jpe