Menu
Coddy logo textTech

File Descriptor (rdi)

Coddy Assembly 여정의 기초 섹션에 포함된 레슨 — 45개 중 36번째.

이전 레슨에서 여러분은 mov rdi, 1을 write 시스템 호출의 일부로 사용했습니다. 그 숫자 1은(는) 파일 디스크립터라고 불립니다.

파일 디스크립터는 운영체제에게 데이터를 어디로 보낼지 알려주는 숫자입니다.

Linux의 세 가지 표준 파일 디스크립터:

파일 디스크립터이름데이터 전송 위치
0stdin키보드 입력 (사용자로부터 데이터 읽기)
1stdout화면 출력 (일반 프로그램 출력)
2stderr화면 출력 (에러 메시지)

왜 화면에 두 개의 출력이 있나요?

일반 출력(stdout)과 오류 출력(stderr)은 동일한 화면으로 전달되지만, 서로 별개로 처리됩니다. 이를 통해 다음과 같은 작업이 가능합니다:

  • 화면에서 오류를 계속 확인하면서 일반 출력을 파일로 리다이렉션하기
  • 일반 출력이 숨겨져 있는 경우에도 오류 표시하기

이 코스에서 출력할 때:

메시지를 출력할 때 항상 파일 디스크립터 1 (stdout)을 사용하게 됩니다. 아직 stderr는 필요하지 않습니다.

예시:

mov rdi, 1      ; 출력을 stdout(화면)으로 보냅니다

잘못된 파일 디스크립터를 사용하면 어떻게 되나요?

사용할 경우결과
0 (stdin)write 시스템 호출은 출력이 아닌 입력을 기대합니다 — 실패하거나 아무 작업도 수행하지 않습니다
2 (stderr)stdout처럼 작동(화면에 출력)하지만, 오류를 위한 용도입니다
기타 다른 숫자커널이 이를 인식하지 못합니다 — 시스템 호출이 실패합니다
challenge icon

챌린지

'OK'라는 값과 줄바꿈 문자가 포함된 message라는 이름의 문자열이 주어집니다. 화면(stdout)에 출력하도록 파일 디스크립터를 설정하는 코드 줄을 작성하세요. rdi에 대한 mov 명령어만 작성해야 합니다.

직접 해보기

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

section .text
    global _start

_start:
    ; 학생이 여기에 파일 디스크립터를 설정합니다
    %include "solution.asm"
    
    mov rax, 1
    ; rdi는 이미 학생에 의해 설정되어 있어야 합니다
    mov rsi, message
    mov rdx, msgLen
    syscall

    mov rax, 60
    mov rdi, 0
    syscall
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

기초의 모든 레슨