개발 환경 및 프로젝트 관리/Linux 개념

ls 명령어 내부와 표준 출력(stdout) 개념

Data Jun 2026. 1. 7. 17:27

리눅스에서 사용하는 ls 같은 명령어는 단순한 글자가 아니라,
C 언어로 작성된 프로그램이 컴파일되어 실행되는 결과물이다.

 

아래는 ls의 동작을 단순화한 C 코드 예시다.

printf("%s\n", entry->d_name);

많은 사람들이 이 코드를 보고

“터미널 화면에 출력한다”
라고 이해하지만, 엄밀히 말하면 절반만 맞는 설명이다.

 

1. printf의 정확한 역할

printf의 실제 역할은 다음과 같다.

터미널에 직접 출력하는 것이 아니라,
‘표준 출력(stdout)’이라는 통로로 데이터를 전달한다.

즉,

  • printf → 표준 출력(stdout)에 기록
  • 터미널 화면 → 표준 출력이 연결된 목적지 중 하나

이라는 관계다.

 

2. 그럼 표준 출력(stdout)이란?

**표준 출력(stdout)**은

명령어 실행 결과가 흘러가는 기본 출력 통로이다.

특징은 다음과 같다.

  • 기본적으로 터미널 화면에 연결되어 있음
  • 하지만 필요하면 다른 곳으로 변경 가능
    • 파일
    • 다른 명령어
    • 네트워크 등

그래서 평소에는 결과가 터미널에 보이지만,
사실은 stdout → 터미널로 연결되어 있을 뿐이다.

 

3. 왜 이 개념이 중요한가?

이 구조를 이해하면 다음이 자연스럽게 설명된다.

ls | grep txt

 

  • ls : 결과를 stdout으로 출력
  • | : stdout을 다른 명령어의 입력으로 연결
  • grep : 그 입력을 받아서 처리

즉,
명령어들이 직접 대화하는 게 아니라
stdout이라는 통로를 통해 연결되는 구조
다.

 

 

4. 정리하면

printf는 화면에 찍는 함수가 아니라,
표준 출력(stdout)에 결과를 흘려보내는 함수다.
터미널은 그 표준 출력이 연결된 여러 목적지 중 하나일 뿐이다.