C에서 stderr로 인쇄

Jinku Hu 2023년10월12일
  1. fprintf 함수를 사용하여 C에서stderr로 인쇄
  2. dprintf 함수를 사용하여 C에서stderr로 인쇄
  3. fwrite 함수를 사용하여 C에서stderr로 인쇄
C에서 stderr로 인쇄

이 기사에서는 C에서 stderr로 인쇄하는 방법에 대한 여러 방법을 소개합니다.

fprintf 함수를 사용하여 C에서stderr로 인쇄

C의 표준 I/O 라이브러리는 프로그램이 시스템에서 시작될 때 암시 적으로 열리는 세 개의 텍스트 스트림을 제공합니다. 이 스트림은

  • 표준 입력 (stdin)-입력을 읽는 데 사용됩니다.
  • 표준 출력 (stdout)-출력을 쓰는 데 사용됩니다.
  • 표준 오류 스트림 (stderr)-런타임 중에 오류를 기록하거나 메시지를 디버그하는 데 사용됩니다.

이러한 스트림에 데이터를 인쇄하기 위해printf 계열 함수가 사용됩니다. fprintf는 일반적으로 특정 출력 스트림에 텍스트를 출력하는 데 사용됩니다. stderr로 인쇄해야 할 때stderr 스트림을 대상으로하고이를 함수의 첫 번째 인수로 전달합니다. 두 번째 인수는 다른 개체를 출력에 포함하고 주어진 형식을 구성하는 수단을 제공하는 형식 문자열 자체입니다. 컴파일하는 동안 자동으로 연결되므로""에 여러 문자열을 포함합니다.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

#define RED "\e[0;31m"
#define NC "\e[0m"

int main(int argc, char *argv[]) {
  if (argc != 2) {
    fprintf(stderr, RED "[ERROR]" NC
                        ": No string argument provided! \n"
                        "You must provide a program path as argument\n");
    exit(EXIT_FAILURE);
  }

  char *str = malloc(strlen(argv[1]) + 1);
  strcpy(str, argv[1]);

  printf("str: %s\n", str);

  free(str);
  exit(EXIT_SUCCESS);
}

출력:

[ERROR]: No string argument provided!
You must provide a program path as argument

dprintf 함수를 사용하여 C에서stderr로 인쇄

또는 파일 설명자를 첫 번째 인수로 사용한다는 점을 제외하면 fprintf호출과 유사한 dprintf함수를 사용할 수 있습니다. Unix 기반 시스템의 파일 설명자는 프로그램의 열린 파일과 관련된 정수 값입니다.

표준 Unix 헤더 인<unistd.h>에는 언급 된 세 가지 스트림에 대한 매크로 정의 인STDIN_FILENO,STDOUT_FILENOSTDERR_FILENO가 포함되어 있습니다. 두 개의 매크로도 정의합니다.REDNC는 출력에서 텍스트 색상을 수정하는 ASCII 문자 시퀀스입니다.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

#define RED "\e[0;31m"
#define NC "\e[0m"

int main(int argc, char *argv[]) {
  if (argc != 2) {
    dprintf(STDERR_FILENO, RED "[ERROR]" NC
                               ": No string argument provided! \n"
                               "You must provide a program path as argument\n");
    exit(EXIT_FAILURE);
  }

  char *str = malloc(strlen(argv[1]) + 1);
  strcpy(str, argv[1]);

  printf("str: %s\n", str);

  free(str);
  exit(EXIT_SUCCESS);
}

출력:

[ERROR]: No string argument provided!
You must provide a program path as argument

fwrite 함수를 사용하여 C에서stderr로 인쇄

이전 함수에 대한 또 다른 대안은 fwrite입니다. 주로 바이너리 스트림 I/O에 사용되지만 출력 스트림에 텍스트를 인쇄하기 위해 여전히 호출 할 수 있습니다. fwrite는 4 개의 인수를 취하고 그중 첫 번째는 인쇄해야하는 문자열에 대한 포인터입니다. 다음 두 매개 변수는 포인터에 저장된 데이터 항목 수의 크기와 각 항목의 크기를 지정합니다. 단일 문자열을 인쇄하므로 세 번째 인수는 1이 될 수 있으며 크기는 문자열의 길이에 해당합니다. 네 번째 매개 변수는 원하는 스트림을 가리키는FILE*입니다.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

#define RED "\e[0;31m"
#define NC "\e[0m"

int main(int argc, char *argv[]) {
  if (argc != 2) {
    fwrite("[ERROR] : No string argument provided!\n", 39, 1, stderr);
    exit(EXIT_FAILURE);
  }

  char *str = malloc(strlen(argv[1]) + 1);
  strcpy(str, argv[1]);

  printf("str: %s\n", str);

  free(str);
  exit(EXIT_SUCCESS);
}

출력:

[ERROR] : No string argument provided!
작가: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

관련 문장 - C IO