Menu
CoddyTech

Deskryptor pliku (rdi)

Część sekcji Podstawy ścieżki Assembly w Coddy. Lekcja 36 z 45.

W poprzedniej lekcji użyto mov rdi, 1 jako części wywołania systemowego write. Ta liczba 1 jest nazywana deskryptorem pliku.

Deskryptor pliku to liczba, która informuje system operacyjny, dokąd wysłać dane.

Trzy standardowe deskryptory plików w systemie Linux:

Deskryptor plikuNazwaDokąd trafiają dane
0stdinDane wejściowe z klawiatury (odczyt danych od użytkownika)
1stdoutDane wyjściowe na ekranie (normalne dane wyjściowe programu)
2stderrDane wyjściowe na ekranie (komunikaty o błędach)

Dlaczego ekran ma dwa strumienie wyjściowe?

Zwykłe wyjście (stdout) i wyjście błędów (stderr) trafiają na ten sam ekran, ale są traktowane osobno. Dzięki temu możesz:

  • Przekierować zwykłe wyjście do pliku, a jednocześnie widzieć błędy na ekranie
  • Wyświetlać błędy nawet wtedy, gdy zwykłe wyjście jest ukryte

Do drukowania w tym kursie:

Do drukowania komunikatów zawsze będziesz używać deskryptora pliku 1 (stdout). Na razie nie potrzebujesz stderr.

Przykład:

mov rdi, 1      ; wyślij wynik do stdout (na ekran)

Co się stanie, jeśli użyjesz nieprawidłowego deskryptora pliku?

Jeśli użyjeszWynik
0 (stdin)Wywołanie systemowe zakończy się niepowodzeniem, jeśli dane wejściowe pochodzą z potoku lub pliku. W terminalu tekst zwykle nadal zostanie wyświetlony, ale stdin służy do danych wejściowych, a nie wyjściowych
2 (stderr)Działa tak jak stdout (wyświetla tekst na ekranie), ale służy do błędów
Dowolny inny numerJądro go nie rozpoznaje: wywołanie systemowe kończy się niepowodzeniem
challenge icon

Wyzwanie

Otrzymujesz ciąg znaków o nazwie message o wartości 'OK', po którym następuje znak nowej linii. Napisz wiersz kodu, który ustawia deskryptor pliku na wyświetlanie na ekranie (stdout). Zapisz tylko instrukcję mov dla rdi.

Spróbuj swoich sił

section .data
    message db 'OK', 0x0a
    msgLen equ $ - message

section .text
    global _start

_start:
    ; Student ustawia tutaj deskryptor pliku
    %include "solution.asm"
    
    mov rax, 1
    ; rdi powinien być już ustawiony przez studenta
    mov rsi, message
    mov rdx, msgLen
    syscall

    mov rax, 60
    mov rdi, 0
    syscall
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Podstawy

Poćwicz samodzielnie: Edytor online Assembly