proc_pid_fd(5) File Formats Manual proc_pid_fd(5) NAZWA /proc/pid/fd/ - deskryptory pliku OPIS /proc/pid/fd/ Jest to podkatalog zawierajacy po jednym wpisie dla kazdego otwartego przez proces pliku; nazwa tego wpisu jest deskryptor pliku i jest on dowiazaniem symbolicznym do rzeczywistego pliku. Dlatego 0 jest standardowym wejsciem, 1 jest standardowym wyjsciem, 2 jest standardowa diagnostyka, itd. W przypadku deskryptorow plikow potokow i gniazd, wpisy beda dowiazaniami symbolicznymi, ktorych zawartoscia jest typ pliku z i-wezlem. Wywolanie readlink(2) na takim pliku zwroci ciag w postaci: typ:[i-wezel] Przykladowo socket:[2248868] bedzie gniazdem z i-wezlem 2248868. W przypadku gniazd, i-wezel mozna wykorzystac do pozyskania wiekszej liczby informacji z jednego z plikow z katalogu /proc/net/. W przypadku deskryptorow plikow, ktore nie maja odpowiadajacego i-wezla (np. deskryptorow plikow tworzonych za pomoca bpf(2), epoll_create(2), eventfd(2), inotify_init(2), perf_event_open(2), signalfd(2), timerfd_create(2) i userfaultfd(2)), wpis bedzie dowiazaniem symbolicznym z zawartoscia w postaci anon_inode:typ-pliku W wielu przypadkach (lecz nie wszystkich) typ-pliku jest otoczony nawiasami kwadratowymi. Przykladowo dowiazanie symboliczne deskryptora pliku epoll bedzie dowiazaniem symbolicznym, ktorego zawartoscia jest lancuch anon_inode:[eventpoll]. W procesie wielowatkowym zawartosc tego katalogu nie jest dostepna, jezeli watek glowny juz sie zakonczyl (zazwyczaj przez wywolanie pthread_exit(3)). Programy, ktore przyjmuja nazwe pliku jako argument wiersza polecenia, lecz nie czytaja standardowego wejscia, jesli nie podano argumentu oraz programy ktore zapisuja do pliku nazwanego argumentem wiersza polecenia, lecz nie wysylaja danych wyjsciowych na standardowe wyjscie, mozna zmusic do uzywania standardowego wejscia lub wyjscia wykorzystujac pliki /proc/pid/fd jako argumenty wiersza polecen. Na przyklad, zakladajac, ze opcja -i okresla plik wejsciowy, a opcja -o okresla plik wyjsciowy: $ foobar -i /proc/self/fd/0 -o /proc/self/fd/1 ... co daje dzialajacy filtr. /proc/self/fd/N jest w przyblizeniu tym samym co /dev/fd/N na niektorych systemach uniksowych i uniksopodobnych. Wiekszosc linuksowych skryptow MAKEDEV tworzy dowiazania symboliczne /dev/fd do /proc/self/fd. Wiekszosc systemow udostepnia dowiazania symboliczne /dev/stdin, /dev/stdout i dev/stderr, ktore linkuja odpowiednio do plikow 0, 1 i 2 w /proc/self/fd. Powyzsze, przykladowe polecenie moze byc wiec zapisane rowniez tak: $ foobar -i /dev/stdin -o /dev/stdout ... Uprawnienie do rozwiazania lub odczytu (readlink(2)) dowiazan symbolicznych w tym katalogu, zalezy od sprawdzenia trybu dostepu ptrace: PTRACE_MODE_READ_FSCREDS; zob. ptrace(2). Prosze zauwazyc, ze w przypadku deskryptorow pliku odnoszacych sie do i-wezlow (potokow i gniazd, zob. wyzej), ich i-wezly maja bity uprawnien i informacje o wlasnosci odmienne od tych, z wpisu /proc/pid/fd, a wlasnosc moze sie roznic od identyfikatorow uzytkownika i grupy procesu. Proces nieuprzywilejowany moze nie miec odpowiednich uprawnien do ich otwarcia, jak w tym przykladzie: $ echo test | sudo -u nobody cat test $ echo test | sudo -u nobody cat /proc/self/fd/0 cat: /proc/self/fd/0: Brak dostepu Deskryptor pliku 0 odnosi sie do potoku utworzonego przez powloke i bedacego wlasnoscia tego uzytkownika powloki, ktorym nie jest nobody, zatem cat nie ma uprawnien do utworzenia nowego deskryptora pliku do odczytu z tego i-wezla, nawet gdy moze wciaz czytac z jego istniejacego deskryptora pliku 0. ZOBACZ TAKZE proc(5) TLUMACZENIE Autorami polskiego tlumaczenia niniejszej strony podrecznika sa: Przemek Borys , Robert Luberda i Michal Kulach Niniejsze tlumaczenie jest wolna dokumentacja. Blizsze informacje o warunkach licencji mozna uzyskac zapoznajac sie z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje sie ZADNEJ ODPOWIEDZIALNOSCI. Bledy w tlumaczeniu strony podrecznika prosimy zglaszac na adres listy dyskusyjnej . Linux man-pages 6.9.1 2 maja 2024 r. proc_pid_fd(5)