C_C++

(C언어) open: 파일을 연다

고니자니 2023. 3. 14. 10:50
반응형
#include <fcntl.h>
#include <sys/stat.h>
int open(const char *path, int access[, unsigned mode]);

open 함수는 path로 지정된 파일을 엽니다. access 인수의 지정에 따라서 읽거나 쓰기 작업을 준비합니다.

access는 bitwise OR(비트 논리합) 작업을 수행하며, 다음과 같은 기호 상수를 사용할 수 있습니다.

이 기호상수는 <fcntl.h> 헤더 파일에 정의되어 있습니다.

 

O_RDONLY 읽기
O_WRONLY 쓰기
O_RDWR 읽기와 쓰기
   
O_APPEND 추가
O_CREAT 파일이 존재하지 않으면 새로 생성하며, 이미 존재하면 영향을 미지치 않는다.
O_TRUNC 파일이 존재하면 기존 파일의 길이를 0으로 만든다.
O_EXCL O_CREAT와 함께 사용하며, 파일이 이미 존재하면 오류가 반환된다.
O_BINARY 이진 모드로 파일을 연다.
O_TEXT 테스트 모드로 파일을 연다.

 

access 인수에 O_CREAT 플래그가 사용된 경우 <sys/stat.h> 헤더 파일에 정의된 다음과 같은 기호 상수로부터 open 함수로의 mode 인수값을 제공하여야 합니다.

 

S_IWRITE 쓰기 작업 허가
S_IREAD 읽기 작업 허가
S_IREAD | S_IWRITE 읽고 쓰기 작업 허가

 

반환값

open 함수의 반환값은 다음과 같습니다.

작업을 성공적으로 수행했으면 음수가 아닌 정수(파일 핸들)를 반환하고, 파일의 위치는 맨 처음을 가리키게 됩니다.

오류가 발생하면 -1을 반환하고, 전역변수 errno를 다음 중 하나로 설정합니다.

ENOENT 경로나 파일을 찾을 수 없음
EMFILE 너무 많은 파일이 열려 있음
EACCES 작업 허가 거절
EINVACC 유효하지 않은 access 코드

 

참고: open, close, read, write, lseek, _open, _close, _read, _write

 

#include <stdio.h>
#include <string.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <io.h>

int main()
{
	int handle;
	char s[] = "Opens a file.";
	handle = open("open.txt", O_WRONLY);
	if (handle == -1)
	{
		perror("Error: ");
		return 1;
	}

	write(handle, s, strlen(s));
	close(handle);
	
	return 0;
}

open: 파일을 연다

 

반응형

 

 

비주얼스튜디오에서는 _open, _write, _read 함수를 사용해야 합니다.

#define _CRT_SECURE_NO_WARNINGS  // Visual Studio
#include <stdio.h>
#include <string.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <io.h>

int main()
{
	int handle;
	char s[] = "Opens a file.";
	handle = _open("open.txt", O_CREAT | O_TEXT);
	if (handle == -1)
	{
		perror("Error: ");
		return 1;
	}

	_write(handle, s, strlen(s));
	_close(handle);
	
	return 0;
}

 

반응형