Chciałbym sprowokować sytuację, w której nie ma już deskryptora pliku.Jak mogę zasymulować brak deskryptora pliku?
myślałem o 2 możliwości:
- Otwarcie tysięcy plików losowo do wyniku jest otwarta -1
- została ustawiona bardzo niską liczbę deskryptora pliku dostępnego (powiedzmy stdin, stdout i stderr).
Jak zrobiłbyś to?
Lub użyj ['setrlimit'] (http://linux.die.net/man/2/setrlimit) z C. – o11c
Czy powłoka tworzy deskryptory plików podczas tworzenia zewnętrznego programu? Myślę, że potok musiałby przynajmniej użyć 'pipe (2)' i różne rodzaje podstawiania również mogą powodować problemy. Przynajmniej powinieneś wiedzieć, że ulimit znacznie utrudni twoją powłokę. – Kevin
@Kevin, przekierowanie może być wykonane przez 'dup (2)', 'dup2 (2)' lub 'pipe (2)', ale gdy powłoka po prostu spawnuje program i tylko widelce i używa 'execve (2)' która przechodzi przez pierwsze 3 deskryptory bez tworzenia nowych podprocesów. Dla rzeczywistego przekierowania, niezależnie od tego, czego używasz, tworzony jest deskryptor, ponieważ deskryptor jest duplikowany, zanim można go ponownie przypisać/dołączyć, ponieważ stdin jest już powiązany z deskryptorem stdin powłoki. Limit może zostać podniesiony ponownie dopiero po teście do domyślnego górnego limitu (zobacz wartość domyślną z 'ulimit -n'). – Matthew