write 함수로 문자와 문자열을 출력하는 것에 대해 좀 더 알아두면 유용한 사항들이 있다. 문자 그대로 출력하는 다양한 예시와 상황을 정리해보자.
문자 리터럴 그대로 출력: 특정 문자를 출력할 때, 해당 문자를 문자열로 감싸서 출력할 수 있다. 예를 들어, 문자 A를 출력하려면:
#include <unistd.h>
int main() {
write(1, "A", 1); // 문자 'A'를 문자열로 출력
return 0;
}
이스케이프 시퀀스 문자 그대로 출력: 이스케이프 시퀀스 자체를 문자로 출력하려면 백슬래시(\)와 함께 문자를 문자열로 감싸야 한다. 예를 들어, \n을 문자 그대로 출력하려면:
#include <unistd.h>
int main() {
write(1, "\\n", 2); // '\n'을 문자 그대로 출력
return 0;
}
이 코드는 \n이라는 문자열을 화면에 출력한다.
다른 이스케이프 시퀀스 문자도 같은 방법으로 출력할 수 있다. 예를 들어:
탭 문자 \t를 문자 그대로 출력:
#include <unistd.h>
int main() {
write(1, "\\t", 2); // '\t'을 문자 그대로 출력
return 0;
}
백슬래시 문자 \\를 문자 그대로 출력:
#include <unistd.h>
int main() {
write(1, "\\\\", 2); // '\'을 문자 그대로 출력
return 0;
}
\\은 문자열 내에서 백슬래시를 출력하기 위해 두 개의 백슬래시를 사용한다.
기타 특수 문자: ASCII 코드 값으로 직접 문자를 출력할 수 있다. 예를 들어, ASCII 코드 값 33인 ! 문자를 출력하려면:
#include <unistd.h>
int main() {
char exclamation = 33; // ASCII 값 33은 '!'
write(1, &exclamation, 1); // '!'를 출력
return 0;
}
문자 여러 개 출력: 여러 문자를 출력하려면 문자를 포함하는 문자열과 그 길이를 write 함수에 전달하면 된다.
#include <unistd.h>
int main() {
char text[] = "Hello, World!";
write(1, text, sizeof(text) - 1); // 문자열을 출력, 널 종료 문자 제외
return 0;
}
sizeof(text) - 1을 사용하는 이유는 문자열의 널 종료 문자(\0)를 제외하기 위함이다.
표준 출력 외의 파일 디스크립터: write 함수는 표준 출력(1) 외에도 다른 파일 디스크립터를 사용할 수 있다. 예를 들어, 파일에 쓰려면 파일을 열고 얻은 파일 디스크립터를 사용한다.
#include <unistd.h>
#include <fcntl.h>
int main() {
int fd = open("output.txt", O_WRONLY | O_CREAT | O_TRUNC, 0644);
if (fd < 0) {
return 1; // 파일 열기에 실패한 경우
}
write(fd, "Hello, File!\n", 14);
close(fd);
return 0;
}
\)와 문자를 문자열로 감싸서 출력한다.이러한 방법들을 통해 다양한 형태의 출력을 제어하고 처리할 수 있다.