(Prawie) wszystko jest plikiem, ale nie wszystko jest zwykłym plikiem. Nie ma sensu wywoływać edytora tekstu na czymś, co jest plikiem specjalnym, takim jak katalog, gniazdo sieciowe, port szeregowy itp.
Plik /dev/stdoutmoże być jedną z kilku rzeczy w zależności od wariantu unix:
- plik „specjalny”, zwykle urządzenie znakowe;
- „magiczny” symboliczny link, który wskazuje na plik, który proces uzyskujący dostęp do niego otworzył na tym deskryptorze;
- symboliczny link do jednego z powyższych.
W każdym razie otwieranie /dev/stdouti podobne pliki tworzą nowy deskryptor pliku powiązany z tym samym plikiem, który aplikacja już otworzyła na deskryptorze pliku 1. „Standardowe wyjście” oznacza deskryptor pliku 1 i jest to tylko konwencja, że ten deskryptor pliku jest używany dla danych wyjściowych - jądro nie ma znaczenia.
Po uruchomieniu programu w terminalu wszystkie trzy standardowe deskryptory (0 = standardowe wejście, 1 = standardowe wyjście, 2 = standardowy błąd) są otwierane na urządzeniu końcowym. Odczytywanie z tego urządzenia zwraca znaki wpisane przez użytkownika, a pisanie na tym urządzeniu wyświetla tekst w oknie terminala. (Nie ma standardowego sposobu, biorąc pod uwagę urządzenie końcowe, odczytania wyświetlanego wyjścia lub wstrzyknięcia do niego danych wejściowych).
Po uruchomieniu cat /dev/stdoutdziała dokładnie tak samo jak cat /dev/stdinlub cat /dev/stderr, ponieważ te trzy deskryptory plików są podłączone do tego samego pliku: nakazuje catodczyt z terminala. Właśnie tocat bez argumentu.
Jeśli uruchomiłeś cat /dev/stdout >foo, to /dev/stdoutodniósłby się do pliku foo- to polecenie jest równoważne z cat foo >foo. W zależności od catimplementacji może to albo spowodować błąd (wersja GNU narzeka, że „plik wejściowy to plik wyjściowy”), albo może nic nie robić, ponieważ czyta z pliku, fooktóry jest pusty ( >foopo prostu go obciął). W wersji cat, która nie wykrywa tego specjalnego przypadku, jeśli foonie jest pusty, wówczas cat /dev/stdout >>foolub odpowiednik cat foo >>foodołączałby zawartość pliku do siebie na czas nieokreślony.
Po uruchomieniu vim /dev/stdoutnarzeka, ponieważ nie wie, jak edytować terminal (to po prostu nie ma sensu).