2011-04-01 2 views
1

라이브러리의 목적 중 하나는 파일에서 지정된 양의 바이트를 검색하는 것이고,이 특정 경우에는 액세스를 원합니다. /dev/random 엔트로피 기반 랜덤 시퀀스를 검색합니다.파일에서 n 바이트를 검색하는 (안정적인) 방법을 구현하는 데 문제가 발생했습니다.

fread의 가장 큰 문제점은 더 많은 엔트로피를 기다릴 때 무한정 정지된다는 것입니다. 나의 다음 선택은 바이트를 청크로 가져 가기 위해 feff로 fread를 랩핑했을 것이고, 적어도 반복을 1, 2, 3, 4로 모으는 것에서 더 나은 경험을 위해 백분율을 제공 할 수있다. 정확하게 필요한만큼의 양을 추적하기는 어렵습니다.

내가 찾고자하는 정확한 양과 청크를 허용하는 C 표준의 방법이 있습니까? 이 시간 제한을 찾으려면 데이터 요청을 스레딩하는 것이 좋습니다.

답변

1

는 "표준"정의 버퍼로 파일 스트림에서 부전승의 특정 번호를 읽어 보았다. ISO C 표준을 의미합니까? POSIX? Linux 표준 기반 (LSB)? POSIX의 경우 read 호출을 사용하면 읽으려는 버퍼의 크기를 지정할 수 있습니다. pselect 또는 poll을 사용하여 읽을 수있는 바이트가 있는지 확인하고 차단하는 대신 시간 초과를 사용할 수 있습니다. Linux에서는 읽을 수있는 정확한 바이트 수를 얻기 위해 "FIONREAD"ioctl 호출을 사용할 수 있습니다.

그렇다면 엔트로피 수준이 필요한지 스스로에게 물어야합니다. "/ dev/urandom"에서 읽는 것을 잊을 수도 있습니다. 물론 그러한 경우인지를 결정해야합니다.

+0

ioctl 호출의 마지막 매개 변수가'ioctl (fd, FIONREAD, & unread);라는 정수에 대한 참조를 전달한다고 가정하면/dev/random에 3213910956 개의 사용 가능한 바이트가 포함되어 있다고 주장합니다. fread보다 훨씬 좋은 것으로 보이는 read와 함께 그리고 나는 pselect/poll 옵션을 좋아한다. – Alexander

0

시험해보십시오.

다음은 문제를 해결할 것으로 생각되는 함수의 맨 페이지입니다.

http://www.manpagez.com/man/3/fgets/

난 그냥 FREAD 그런게의 작업이는 fgets는

+0

나는 부호없는 문자를 읽는 제 경우처럼 fread를 사용하여 1, 1 또는 1이 될 것입니다. – Alexander

관련 문제