
307
{
fd
=
open("log.txt", O
_
RDWR
|
O
_
CREAT, 0666);
}
write(fd, buffer, strlen(buffer));
}
코드 예제를 단순하게 유지하기 위해 스레드 안전(thread safety)은 고려하지
않았다. 스레드 안전을 위해서는 뮤텍스로 지연 획득을 보호하여 코드에서 획
득이 한 번만 이루어지도록 해야 한다.
파일을 닫는 것은 어떤가? 이번 장에서 본 것과 같은 일부 애플리케이션의
경우, 파일을 닫지 않는 것도 가능한 선택이다. 애플리케이션이 실행하는 동안
로그를 남기고 애플리케이션을 종료할 때 운영 체제에 열려 있는 파일 클린업
을 맡긴다고 상상해 보자. 시스템 충돌 시 정보가 저장되지 않을까봐 걱정스럽
다면 때때로 파일 내용을 플러시(flush)할 수도 있다.
지금까지는 리눅스 시스템의 파일에 대한 로깅 코드를 구현하였지만, 이제 윈
도우 플랫폼으로 코드를 확장하고자 한다. 지금의 코드는 윈도우에서 동작하
지 않는다.
여러 플랫폼을 지원하려면 먼저 변형 회피를 통해 모든 플랫폼에 대한 공통
코드만 갖도록 하는 것을 고려해야 한다. 이는 리눅스와 윈도우 시스템 양쪽에
서 사용할 수 있는
fopen ...