2011-03-06 2 views
1

나는 C 프로그램에서 우리가 포인터를 사용하여 파일을 열 때 동시에 몇 개의 포인터를 사용하여 같은 파일을 열 수 있는지 묻고 싶습니다. 오류가 발생하지 않았습니까? 제한이 있습니까?파일 열기 포인터

f1= fopen("abc.txt",r) 
f2= fopen("abc.txt",w) 

는 F2 먼저 가까이 할 또는 F1 가까이 첫번째 너무

+1

당신이 문자는 [] = "R"R const 정적 '에 해당 선언이있는 경우 .. – BlackBear

+2

을 우리에게 말해 다음, 스스로 그것을 시도' , 당신이 쓴 것이 효과가 있습니다. 가장 일반적으로, 사람들은'FILE * f1 = fopen ("abc.txt", "r"); 등을 씁니다. 세미콜론은 필수 항목입니다. (컴파일러는 이것보다 훨씬 더 복잡 할 것입니다.) –

+0

파일 스트림을 여는 순서와 상관없이 임의의 순서로 닫을 수 있습니다. 그러나 여러 파일 쓰기 스트림이 있고 다른 데이터를 다른 스트림에 쓰면 스트림을 닫는 순서가 나타나는 데이터에 영향을 줄 수 있습니다. 표준 I/O 코드가 버퍼를 디스크로 플러시하는 순서도 마찬가지입니다. 그리고 일부 시스템에서는 동시 작성자 수가 한 번에 하나씩 같은 단일 파일에 제한을 둘 수 있습니다. Windows는 한 번에 하나의 프로세스 만 파일을 수정하도록 작업을 제어 할 수 있습니다. –

답변

2

예, 대부분의 표준 라이브러리는 특정 프로세스가 한 번에 열 수있는 파일 수에 일부 제한을 부과 할 수있다처럼 또한 시퀀스 문제를 않습니다. 그러나 당신이 일에 관해 중도 적으로 합리적인 한, 당신이 그들을 필요로 할 때만 파일을 열고, 끝날 때 닫습니다. 거의 문제가되지 않습니다.

적어도 FOPEN_MAX 개의 파일을 동시에 열 수 있습니다. 어떤 경우에는 그 이상을 열 수 있지만 (OS가 리소스가 부족한 경우와 같이 다른 곳에서는 부과되지 않는 제한이 있음) 많은 것을 열 수 있습니다. 그것은 매우 간단합니다 : 당신이 FOPEN_MAX보다 더 자주 공개 많은 이상의 파일은 표시 할 수있는 이유에 관해서는 :

편집 N 파일을 열 수있는 기능을 보장하기 위해, 당신은 거의 당신이 가고있는 모든 공간을 미리 할당 할 필요가 그 파일들 (예를 들어, 각각에 대한 버퍼)에 사용할 수 있습니다. 대부분의 프로그램은 어쨌든 한 번에 몇 개 이상의 파일을 열지 않으므로 그 번호를 으로 유지하려고 시도합니다. 어쨌든 대부분 사용하지 않는 공간에서 너무 많은 메모리를 낭비하지 않도록하려면을 낮추십시오.

그런 다음 더 많은 파일을 열 필요가있는 프로그램을 수용하기 위해 realloc (또는 비슷한)을 사용하여 필요에 따라 더 많은 공간을 할당 할 수 있습니다. 그러나 realloc이 실패 할 수 있기 때문에 더 많은 파일을 열려고하는 시도도 실패 할 수 있습니다.

+0

이것에 대한 질문 : FOPEN_MAX는 내 시스템에서 16입니다. 너무 놀랍습니다. 그리고 지금 막 시도했을 때 1021 개의 파일을 열 수있었습니다. 왜 그렇게 큰 불일치? –

+0

@Thomas Padron-McCarthy : 편집 된 답변보기. –

1

그러면 시스템에 대한 대답을 얻을 수 있습니다. 나는 내 16 번, FWIW를 얻었다. `[] = "w"w const 정적 문자를`와;

#include <stdio.h> 

int main(void) 
{ 
    printf("%d\n", FOPEN_MAX); 
    return 0; 
} 
+0

고마워요 vamana 경 – tariq

+0

도있어 16. 고마워요. – tariq