2011-04-13 3 views
1

의 수를 얻는 방법 : readNum에 내가이 같은 stdin에서 읽을 때 읽기 바이트

size_t bufSize = 1024; 
unsigned char inputBuffer[bufSize]; 
size_t readNum = 0; 
readNum = fread(inputBuffer, sizeof(unsigned char) * bufSize, 1, stdin); 

객체의 수를 저장되고, 이것은 내가 표준 입력에서 1024 바이트를 읽을 때 readNum 값 1을 가지고 의미한다. 하지만 stdin <에서 1,024 바이트를 읽었을 때 readNum의 값은 0입니다. 질문 : 숫자가 1024보다 작 으면 표준 입력에서 읽은 바이트 수를 어떻게 알 수 있습니까?

답변

2

사용 readNum = fread(inputBuffer, sizeof(unsigned char), bufSize, stdin);

당신 ' 크기가 bufSize * sizeof(char) 인 요소가 아닌 sizeof(char) 크기의 bufSize 요소를 읽으려고합니다. 따라서 fread 호출에이를 반영해야합니다.

+0

예, 고맙습니다. –

1
size_t fread (void * ptr, size_t size, size_t count, FILE * stream); 

fread는 주어진 크기의 블록을 읽고 성공적으로 읽은 블록의 수를 반환합니다. 당신이 읽고 싶은 다음 1로 블록 크기를 설정 읽은 바이트 수와 바이트의 수와 블록의 수를 반환 할 경우

readNum = fread(inputBuffer, 1, sizeof(unsigned char) * bufSize, stdin); 
+0

1 바이트 이후 stdin에서 읽기가 비효율적인데 동적 배열을 만들었는데 inputBuffer의 값을 저장하고 동적 배열을 주기적으로 다시 할당합니다. 1 바이트 bufSize로 stdin을 읽었을 때 성능은 cca 12 MB/에스. 하지만 bufSize 크기가 256KB 인 경우 읽기 성능은 509MB/s입니다. 그래서 내 생각은,이 256 킬로바이트 버퍼를 가지고 있고 readNum이 0 일 때, inputBuffer는 단지 바이트를 읽는 것보다, 어떻게 읽는가? –

+0

대신 하위 수준의 함수 인 read()를 사용하십시오. – codymanix

0
readNum = fread(inputBuffer, 1, sizeof(unsigned char)*bufSize, stdin); 
관련 문제