문서의 임의 삭제는 제재 대상으로, 문서를 삭제하려면 삭제 토론을 진행해야 합니다. 문서 보기문서 삭제토론 C언어/문법 (문단 편집) ====== fopen, fclose, fread, fwrite ====== {{{#!syntax cpp FILE* fopen(const char* [파일 경로], const char* [모드]); }}} 파일 경로에 입력된 파일을 열고 성공했다면 0이 아닌 값을 반환한다. 보통 파일명만 적는 경우 OS의 정책에 따르지만 보통 작업 경로 (pwd)를 사용하게 되며 전체 경로를 명시적으로 지정해도 된다. 사용 가능한 모드는 다음과 같다. * {{{r}}} 읽기 - 파일이 없으면 오류 * {{{w}}} 쓰기 - 파일이 없으면 생성 있으면 덮어쓰기 * {{{a}}} 이어쓰기 - 파일이 없으면 새로 생성, 그렇지 않다면 파일의 끝부분 부터 이어쓰기하게 된다. * {{{r+}}} 읽고 쓰기 - 파일이 없으면 오류 * {{{w+}}} 읽고 쓰기 - 파일이 없으면 생성 있으면 덮어쓰기 * {{{a+}}} 이어쓰기 - 파일이 없으면 새로 생성, 그렇지 않다면 파일의 끝부분 부터 이어쓰기하게 된다. 모든 C 런타임 라이브러리가 그렇듯이 모든 파라미터는 시스템의 로캘을 따른다. 그렇기 때문에 영어 로캘 환경에서는 한글이 포함된 경로에 액세스 할 수 없으며 한국어 로캘 환경에서는 일본 한자와 가나가 포함된 경로를 읽을 수 없다. 이 때문에 Windows환경에서는 {{{wchar}}}로 된 {{{wfopen()}}}을 제공하고 있으나 표준이 아니므로 크로스플랫폼 환경에서는 사용할수 없다. {{{#!syntax cpp int fclose(FILE*); }}} {{{fopen()}}}이 연 파일 객체를 닫는다. OS의 API가 제공하는것과 달리 C라이브러리의 파일 핸들은 프로세스가 락을 걸어 다른 프로세스가 액세스할 수 없으므로 핸들을 닫아줘야 다른 프로세스가 엑세스 하는것이 가능하다. {{{#!syntax cpp size_t fread(void* [버퍼], size_t [크기], size_t [갯수], FILE* [파일 객체]); size_t fwrite(const void* [버퍼], size_t [크기], size_t [갯수], FILE* [파일 객체]); }}} 파일을 읽어서 버퍼에 쓰거나 버퍼의 내용을 파일에 쓴다. 예시: {{{#!syntax cpp #include const char *DefaultFilePath = "Untitled.txt"; const char DefaultString[] = "Hello World!"; FILE* MyFile; int main() { char buffer[32]; FILE *MyFile; MyFile = fopen(DefaultFilePath, "w+"); // 파일을 연다. if (!MyFile) // 위에서 filename을 열거나 생성하지 못했으면 NULL을 반환하므로 // 이를 확인한다. { printf("Unable to create file: %s\n", DefaultFilePath); return 1; } fwrite( DefaultString, // 버퍼 sizeof(DefaultString) - 1, // 크기 1, // 갯수 MyFile // 파일 ); // MyFile에 DefaultString의 sizeof(DefaultString) - 1 만큼의 내용을 쓴다. fseek( MyFile, 0, SEEK_SET); // 파일에 기록될때 순차적으로 기록되어 커서가 맨 뒤로 가 있는 // 상태이다. 파일을 읽기 위해 커서를 맨 앞으로 가져온다. fread( buffer, sizeof(DefaultString) - 1 > BUFFERSIZE ? BUFFERSIZE - 1 : sizeof(DefaultString) - 1, 1, MyFile); // 파일을 읽어 buffer에 쓴다. fclose(MyFile); // 파일 객체를 닫는다. printf("%s\n", buffer); // 파일을 읽을때 사용한 버퍼의 내용을 출력 } }}}저장 버튼을 클릭하면 당신이 기여한 내용을 CC-BY-NC-SA 2.0 KR으로 배포하고,기여한 문서에 대한 하이퍼링크나 URL을 이용하여 저작자 표시를 하는 것으로 충분하다는 데 동의하는 것입니다.이 동의는 철회할 수 없습니다.캡챠저장미리보기