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_FILENO
및STDERR_FILENO
가 포함되어 있습니다. 두 개의 매크로도 정의합니다.RED
와NC
는 출력에서 텍스트 색상을 수정하는 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!
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