Menu
Coddy logo textTech

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 wskazuje systemowi operacyjnemu, 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 (standardowe dane wyjściowe programu)
2stderrDane wyjściowe na ekranie (komunikaty o błędach)

Dlaczego są dwa wyjścia na ekran?

Zwykłe wyjście (stdout) i wyjście błędów (stderr) trafiają na ten sam ekran, ale są traktowane oddzielnie. 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 wypisywania w tym kursie:

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

Przykład:

mov rdi, 1      ; wyślij dane wyjściowe na stdout (ekran)

Co się stanie, jeśli użyjesz niewłaściwego deskryptora pliku?

Jeśli użyjeszWynik
0 (stdin)Wywołanie systemowe zapisu oczekuje danych wejściowych, a nie wyjściowych: zakończy się niepowodzeniem lub nic nie zrobi
2 (stderr)Działa jak stdout (wypisuje na ekranie), ale jest przeznaczony do błędów
Dowolnej innej liczbyJądro jej 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, aby wypisywać na ekran (stdout). Napisz tylko instrukcję mov dla rdi.

Spróbuj swoich sił

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

section .text
    global _start

_start:
    ; Uczeń ustawia tutaj deskryptor pliku
    %include "solution.asm"
    
    mov rax, 1
    ; rdi powinien być już ustawiony przez ucznia
    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