programing

read()와 fread()의 차이점은 무엇입니까?

copyandpastes 2022. 8. 23. 23:11
반응형

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 라이브러리 기능은 응용 프로그램이 시스템 호출을 하는 대신 시스템 호출에 최적화되어 있습니다.

readsyscall인데 반해fread는 C 표준 라이브러리의 함수입니다.

언급URL : https://stackoverflow.com/questions/584142/what-is-the-difference-between-read-and-fread

반응형