read()와 fread()의 차이점은 무엇입니까?
Linux 툴의 badblocks 소스 코드를 읽고 있습니다.이들은 를 사용합니다.read()
기능을 합니다.표준 C와 차이가 있습니까?fread()
기능하고 있습니까?(나는 그 주장들을 차이로 간주하지 않는다.)
read()
버퍼링되지 않은 낮은 수준의 읽기입니다.UNIX 상에서 직접 시스템을 호출합니다.
fread()
는 C 라이브러리의 일부이며 버퍼링된 읽기를 제공합니다.통상, 콜에 의해서 실장됩니다.read()
버퍼를 채우기 위해서요.
가족read()
-> open
, close
, read
, write
가족fread()
-> fopen
, fclose
, fread
, fwrite
패밀리 읽기:
- are 시스템콜
- 포맷되지 않은 IO: 포맷되지 않은 바이트 스트림이 있습니다.
패밀리 스레드
- 는 표준 C 라이브러리(libc)의 기능입니다.
- 내부 버퍼를 사용하다
- (%.." 파라미터로) 포맷된 IO입니다.
- 항상 Linux 버퍼 캐시 사용
자세한 것은 이쪽입니다만, 이 투고에는 잘못된 정보가 포함되어 있습니다.
내 기억으로는read()
레벨 API는 버퍼링을 하지 않기 때문에read()
한 번에 1바이트의 퍼포먼스 패널티가 발생합니다.fread()
.fread()
블록을 당겨서 원하는 대로 돌립니다. read()
는, 각 콜에 대해서 커널에 드롭 됩니다.
한쪽을 사용하는 코드를 다른 한쪽을 사용하는 것으로 변환할 때는 다음 차이점에 유의해야 합니다.
fread
요청한 바이트 수를 읽거나 파일이 종료되거나 오류가 발생할 때까지 차단합니다.read
블록도 합니다만, 4kB라고 하면, 파일이 끝나지 않았더라도, 1kB만을 읽고 돌아오는 경우가 있습니다.
이는 파일의 저장 장소, 캐시 등에 따라 달라지기 때문에 미묘한 버그를 일으킬 수 있습니다.
read() --> 커널에 대한 이 시스템콜을 직접 사용하여 IO 조작을 수행합니다.
fread() --> 표준 라이브러리에서 제공되는 함수입니다.
부르기fread()
구조 데이터가 저장되는 이진 파일 데이터에 주로 사용됩니다.이들 2개의 주요 차이점은 어플리케이션 내 시스템콜의 수입니다
그fread()
표준 IO 라이브러리 기능은 응용 프로그램이 시스템 호출을 하는 대신 시스템 호출에 최적화되어 있습니다.
read
syscall인데 반해fread
는 C 표준 라이브러리의 함수입니다.
언급URL : https://stackoverflow.com/questions/584142/what-is-the-difference-between-read-and-fread
'programing' 카테고리의 다른 글
Java GUI 프레임워크뭘 고를까?Swing, SWT, AWT, SwingX, JGodies, JavaFX, Apache Pivot? (0) | 2022.08.30 |
---|---|
나는 심판 vue 시험 utils를 사용하여 전자 요소를 선택할 수 있다. (0) | 2022.08.30 |
Vuex - http 서버에서 스토어 데이터를 로드/초기화하는 시기 (0) | 2022.08.23 |
[Vue warn] :상위 구성 요소가 다시 렌더링될 때마다 값이 덮어쓰기되므로 프로펠을 직접 변환하지 마십시오. (0) | 2022.08.23 |
Vue 인스턴스 메서드 내에 확산된 mapMutations에서 "this"를 사용할 수 있습니까? (0) | 2022.08.23 |