반응형
#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, _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;
}
반응형
'C_C++' 카테고리의 다른 글
비주얼스튜디오에서 스택(stack) 크기 설정(늘리기) (0) | 2023.03.25 |
---|---|
(C언어) 복소수의 사칙연산: 합, 차(빼기), 곱(곱하기), 나누기 (0) | 2023.03.21 |
(C언어) Sleep(), Dev C++에서는 Sleep() (0) | 2023.01.04 |
(C언어) 현재 년-월-일 시간:분:초, 디지털 시계 만들기 (0) | 2023.01.04 |
(C언어) 10진수를 8진수로 변환하기 (0) | 2023.01.04 |