2012-10-12 8 views
0

나는 C로 프로그램을 작성하여 파일에 일련의 문자를 쓰려고했습니다. 5 개의 영숫자와 그 다음 하나는 (char)(30), 'record-delimiter' 문자, 반복 ... 개행 문자가 없습니다. 프로그램은 508 번째 반복 (3048 자)에 도달 할 때까지 완벽하게 반복 할 수 있습니다. 그런 다음 죽어서 파일에 액세스 할 수 없다고 말합니다.유닉스에서 C로 파일 쓰기 프로그램을 열거 나 닫습니다.

이 시퀀스가 ​​기록 될 때마다 프로그램의 구조가 파일을 닫고 다시 열어야하므로 (스크립트는 더 큰 의사 데이터베이스 시뮬레이트 모듈의 일부 임), 열린/쓰기/close process ... 데이터베이스 모듈 코드를 해부하기 전에 (꽤 많은 행이 있기 때문에 그것을 피할 수 있으면 안된다.), 거의 읽지 않은 것을 알고 있는지 궁금해했다./유닉스에서 쓰기 제한, 특정 제한 시간 내에 파일에 3048 문자가있는 문제 또는 파일에 508 {30}이있는 문제 또는 이와 비슷한 간단한 (그러나 잡기는 어렵습니다.) 내가 그것을 fclosed로 우연히 fopening 또는 오프 그 자체를 넘어 트립시 - 오프 기회에 몇 밀리미터로 읽기/쓰기 지연했지만 시가 없습니다.

+4

왜이 문제를 나타내는 최소한의 샘플을 보여주십시오. 가능성이있다 (버퍼, filedescriptors, 다른 것들). – sehe

답변

6

508은 열려있는 파일의 수에 대한 적절한 기본값 인 512에 가까울 정도입니다. ulimit -a 명령을 입력하고 어떤 제한이 적용되는지 확인하십시오. 당신이 프로그램이 실제로 파일을 닫는되어 있는지 확인, 512 인 경우

[[email protected] ~]$ ulimit -a 
core file size   (blocks, -c) 0 
data seg size   (kbytes, -d) unlimited 
scheduling priority    (-e) 0 
file size    (blocks, -f) unlimited 
pending signals     (-i) 22084 
max locked memory  (kbytes, -l) 64 
max memory size   (kbytes, -m) unlimited 
open files      (-n) 1024 
pipe size   (512 bytes, -p) 8 
POSIX message queues  (bytes, -q) 819200 
real-time priority    (-r) 0 
stack size    (kbytes, -s) 8192 
cpu time    (seconds, -t) unlimited 
max user processes    (-u) 1024 
virtual memory   (kbytes, -v) unlimited 
file locks      (-x) unlimited 

: 내 페도라 15 시스템에서 (1024)는 프로세스 당 열려있는 파일의 수에 대한 제한입니다. 일부 코드를 표시하지 않고 우리가 할 수있는 것은 추측입니다.

+0

또한'lsof -p pid-of-your-program'을 실행하면 파일 디스크립터가 새어 나가는 지 알려줄 것이다. 폐쇄). –

+0

또는 단지'find/proc/$ PID/fd'. 어쨌든, 이것은 실제 답변이 아닙니다. (실제 질문은 없습니다) – sehe

+3

* 508은 512에 근접 할 수 있습니다 * : 예, stdin, stdout 및 stderr가 511에 도달했습니다. : x <512) :-) –