[일반] 시스템콜과 라이브러리 함수의 차이점을 알고싶습니다..^

complete2의 이미지

C 표준 I/O 라이브러리 함수와

시스템 콜 함수의 차이점에 대해서 알고 싶습니다.. ^^

개념적인 설명 부탁드리겠습니다..^^;

segfault의 이미지

C 라이브러리의 IO 함수가 시스템콜의 wrapper 아닌가요?

케인의 이미지

C 표준 I/O: fopen, fclose, fread, fwrite
POSIX 표준 I/O: open, close, read, write

이 차이를 말씀하시는 건가요?

C 표준 입출력 함수는 응용프로그램의 프로세스 내부적으로 중간에 버퍼를 할당하도록 되어 있습니다. 이때문에 C 표준 입출력을 buffered i/o 라고 합니다. 예컨데 fread에서 1바이트만 읽어도 사실 커널로부터는 C 라이브러리 내부적으로 정한 버퍼 크기만큼 우선 읽어옵니다. 그리고 다음 번 fread를 호출할 경우 버퍼에 있는 만큼은 커널에서 읽어오지 않고 버퍼에서만 읽어옵니다. 따라서 작은 데이터를 반복적으로 읽는 경우에는 시스템콜을 많이 하지 않아서 효율적입니다. C 표준에는 버퍼가 없는 입출력은 정의되어있지 않습니다.

반면에 POSIX 표준 입출력 함수는 중간에 버퍼가 존재하지 않습니다. read를 호출하면 이 때 지정한 만큼의 데이터만 커널에서 읽어옵니다. 즉, read는 호출될 때마다 항상 커널에서 바로 읽어옵니다. (따라서 unbuffered i/o라고 합니다.)

보통은 C 표준 I/O는 단지 중간에 버퍼가 있는 POSIX I/O의 wrapper인 경우가 많습니다. 그래도 C 표준 I/O는 fprintf, fscanf 같은 고수준의 포멧팅을 지원한다는 장점이 있겠지요.

sozu의 이미지

babjo87 wrote:
C 라이브러리의 IO 함수가 시스템콜의 wrapper 아닌가요?

Windows 에서는 API 를 Wrapping 합니다. :D

fopen, fread, fwrite 등등에서

CreateFile, ReadFile, WriteFile 등을 사용하죠.

C 라이브러리는 플래폼 마다 서로 Wrapping 하는 것은 다르지만 같은 Prototype 과 (어느정도)같은 동작을 보장해 주겠죠. 8)

-----------
청하가 제안하는 소프트웨어 엔지니어로써 재미있게 사는 법
http://sozu.tistory.com

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.