Linux의 파이프에 데이터를 쓰려면 fwrite()
함수 호출을 사용하고 있습니다.fwrite()의 버퍼링 동작 이해
이전에 작은 덩어리의 데이터 (평균 20 바이트)에 대해 fwrite()
이 반복적으로 호출되었으며 버퍼링은 fwrite()
으로 남았습니다. strace는 한 번에 4096 바이트의 데이터가 쓰여지고 있음을 보여 주었다.
이 글쓰기 과정이 내 프로그램의 병목이었습니다. 그래서 코드에서 데이터를 64KB 블록으로 버퍼링 한 다음 fwrite()
을 사용하여 한 번에 전체 블록을 작성하기로 결정했습니다. setvbuf()
을 사용하여 FILE * 포인터를 'No Buffering'으로 설정했습니다.
예상대로 성능이 향상되지 않았습니다.
더 중요한 것은 strace
출력은 데이터가 한 번에 4096 바이트 씩 쓰여지고 있음을 나타냅니다. 누군가 제게이 행동을 설명해 주시겠습니까? 64KB의 데이터로 fwrite()
을 호출하는 경우 한 번에 4096 바이트 만 쓰는 이유는 무엇입니까?
FILE * 포인터를 사용하여 파이프에 데이터를 쓰는 대신 fwrite()
의 대안이 있습니까?
코드를 표시 할 수 있습니까? – tuxuday
@Shailesh_Tainwala : 당신은 C++로 코드를 작성하고 있을지 모르지만 이것은 C++가 아닌 c 질문입니다. 'fwrite()'는 C++ 함수가 아닌 c 함수입니다. 질문에 태그를 추가하여 더 많은 잠재 고객을 확보 할 수있게되었습니다. –