주제를 "시스템콜은 빠르다.."라고 하셨는데요,
상대적이겠지요?!
그럼 누구보다? 당연히 라이브러리입니다.
라이브러리도 결국 IO를 수행하기 위해 시스템호출을 사용하게되겠지요.
write()는 시스템 호출이고, *printf()시리즈들은 전부 라이브러리입니다.
라이브러리들은 대체로 버퍼링 루틴을 자신이 가지고 있으며,
이로 인한 behavior의 변화에서 오류를 발생시키기 쉽습니다.
따라서, 대체로 시스템호출을 이용한 프로그래밍이 라이브러리를 이용한
프로그래밍보다 나을 수 있습니다.
아니면, 라이브러리의 내부 동작을 100% 이해하고 사용해야
보다 튼튼한(robust;safe;secure) 코드를 짤 수 있습니다.
속도에서 관해서는 관련 글타래가 많이 있을텐데...
시스템 호출은 '그 호출' 자체는 빠르지만, 전체적인 프로그램 상에서도 빠르다고 할 수는 없습니다. 특히나 파일 입출력 등이 자주 일어난다면 표준 라이브러리가 어중간하게 시스템 콜을 난무하는 것보다 전체적인 성능에서 많이 차이가 납니다.
그리고 대체로 표준 라이브러리를 이용한 프로그래밍이 시스템 콜을 마구하는 프로그램보다 좋습니다. 시스템 콜이라는건 시스템(OS 등)마다 일부 차이가 날 수 있는겁니다. 표준 라이브러리의 behavior는 규격으로 일정하게 정해져 있는 것이고, 이런건 변화가 없습니다. (출력 버퍼링은 표준 라이브러리의 규격입니다) 오히려 차이가 난다면 시스템 콜이지요. (물론 read() 같은 POSIX 표준 시스템 콜은 크게 문제가 없습니다)
단순히 자신의 머신에서 최고의 속도를 얻기 위해서라면 시스템 콜을 활용해서 복잡한 코드를 짜는게 좋습니다만... (필요한 부분에 직접 버퍼링 구현을 한다던지...)
출력 버퍼가 안비워 진거 같군요 printf문 다음에 fflush
출력 버퍼가 안비워 진거 같군요
printf문 다음에 fflush(stdout);를 하시던가
아니면 printf("aaa\n"); 뒤에 개행을 줘보십시요.
출력버퍼가 비워질때는
1. 개행을 만났을때
2. 강제적으로 비울때
3. 입력을 만났을때
입니다.
--
cdecl
--
cdecl
[code:1]printf ("aaa"
로 해보세요.
---------
간디가 말한 우리를 파괴시키는 7가지 요소
첫째, 노동 없는 부(富)/둘째, 양심 없는 쾌락
셋째, 인격 없는 지! 식/넷째, 윤리 없는 비지니스
이익추구를 위해서라면..
다섯째, 인성(人性)없는 과학
여섯째, 희생 없는 종교/일곱째, 신념 없는 정치
출력 버퍼가 차지 않아서 그럴 수 있습니다. 강제로 출력하게 하려면
출력 버퍼가 차지 않아서 그럴 수 있습니다. 강제로 출력하게 하려면
printf("aaa");
fflush(stdout);
하면 됩니다.
답변 감사합니다..^^;그런데, 이런일이 왜 생기는 건가요?
답변 감사합니다..^^;
그런데, 이런일이 왜 생기는 건가요?
혹시 참고할 문서가 있나요?
[quote="dragem"]답변 감사합니다..^^;그런데, 이런
Advanced Programming in the UNIX Environment 책에 보면..
관련된 내용이 나옵니다..
stdout 은.. 버퍼링을 하기 때문에.. 개행문자를 만나거나 버퍼가 꽉차기전엔 출력이 전혀 없고....
stderr 은.. 버퍼링을 전혀 하지 않고..
오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...
http://mytears.org ~(~_~)~
나 한줄기 바람처럼..
주제를 [b]"시스템콜은 빠르다.."[/b]라고 하셨는데요,상대적이겠
주제를 "시스템콜은 빠르다.."라고 하셨는데요,
상대적이겠지요?!
그럼 누구보다? 당연히 라이브러리입니다.
라이브러리도 결국 IO를 수행하기 위해 시스템호출을 사용하게되겠지요.
write()는 시스템 호출이고, *printf()시리즈들은 전부 라이브러리입니다.
라이브러리들은 대체로 버퍼링 루틴을 자신이 가지고 있으며,
이로 인한 behavior의 변화에서 오류를 발생시키기 쉽습니다.
따라서, 대체로 시스템호출을 이용한 프로그래밍이 라이브러리를 이용한
프로그래밍보다 나을 수 있습니다.
아니면, 라이브러리의 내부 동작을 100% 이해하고 사용해야
보다 튼튼한(robust;safe;secure) 코드를 짤 수 있습니다.
속도에서 관해서는 관련 글타래가 많이 있을텐데...시스템 호출은 '그
속도에서 관해서는 관련 글타래가 많이 있을텐데...
시스템 호출은 '그 호출' 자체는 빠르지만, 전체적인 프로그램 상에서도 빠르다고 할 수는 없습니다. 특히나 파일 입출력 등이 자주 일어난다면 표준 라이브러리가 어중간하게 시스템 콜을 난무하는 것보다 전체적인 성능에서 많이 차이가 납니다.
그리고 대체로 표준 라이브러리를 이용한 프로그래밍이 시스템 콜을 마구하는 프로그램보다 좋습니다. 시스템 콜이라는건 시스템(OS 등)마다 일부 차이가 날 수 있는겁니다. 표준 라이브러리의 behavior는 규격으로 일정하게 정해져 있는 것이고, 이런건 변화가 없습니다. (출력 버퍼링은 표준 라이브러리의 규격입니다) 오히려 차이가 난다면 시스템 콜이지요. (물론 read() 같은 POSIX 표준 시스템 콜은 크게 문제가 없습니다)
단순히 자신의 머신에서 최고의 속도를 얻기 위해서라면 시스템 콜을 활용해서 복잡한 코드를 짜는게 좋습니다만... (필요한 부분에 직접 버퍼링 구현을 한다던지...)
와.. 질문 하나로..많은걸 얻게 되네요^^너무 기분 좋네여~ 답
와.. 질문 하나로..많은걸 얻게 되네요^^
너무 기분 좋네여~ 답변다신분들 감사합니다~
댓글 달기