2011년7월14일_저수준 파일입출력관련 함수와 옵션정리
1. open( )
# man 2 open ※ 적으려고 하였으나 너무 복잡하여 스크린샷을 삽입합니다. |
● open( )의 사용법
1: //열기실패시 -1반환, 성공시 파일디스크립터 (장치 = 파일) 2: //현재 실행되는 디렉토리에서 상대경로나 절대경로에 있는 파일명과, 3: //flags(접근 목적/방법)와 퍼미션설정을 인자로 넘겨줌. 4: int open(const char *pathname, int flags); 5: int open(const char *pathname, int flags, mode_t mode); |
● flags
flags |
값 |
의미 |
O_APPEND |
0x0001 |
쓰기용으로 파일을 열어, 파일의 끝을 현재위치로 설정한다. |
O_CREAT |
0x0002 |
쓰기용으로 파일을 생성한다. 파일이 이미 존재하면 효과가 없다. |
O_EXCEL |
0x0004 |
O_CREAT와 함께 사용되어 파일이 이미 존재할 경우 오류값을 반환 |
O_RDONLY |
0x0100 |
읽기 전용으로 파일을 연다. |
O_RDWR |
0x0200 |
읽고 쓰기용으로 파일을 연다. |
O_TRUNC |
0x0400 |
파일을 열고 내용을 삭제하여 파일의 길이를 0으로 만든다. |
O_WRONLY |
0x0800 |
쓰기전용으로 파일을 연다. |
O_BINARY |
0x4000 |
이진 모드로 파일을 연다. (리눅스는 항상 바이너리모드이다.) |
O_TEXT |
0x8000 |
텍스트 모드로 파일을 연다. |
flags의 값들은 상호배타적이기 때문에 경우에 따라서는 여러 개의 값을 주어야 하는데 이 경우에는 비트 OR연산자 ’|’ 사용
ex) 파일생성과 파일내용지움과 쓰기모드:
open(fd, O_CREAT | O_TRUNC | O_WRONLY);
● mode
pmode | 값 | 의미 |
S_IWRITE | 0x00400 | 사용자 쓰기 허용 |
S_IREAD | 0x00200 | 사용자 읽기 허용 |
S_IEXEC | 0x00100 | 사용자 실행 허용 |
☆ flags와 같이 OR연산으로 조합해서 사용할 수 있다.
☆ VMWare의 리눅스공유폴더에서는 파일속성이 제대로 되지 않는다
2. close( )
짧아서 좋아~ |
//바빠서 close( ), read( ), write( )는 사용법만 작성
● close( )의 사용법
1: //에러시 -1을 반환, 성공시 0을 반환
2: //파일디스크립터(file discriptor)를 인자로 넘겨주는 그 파일디스크립터를 소멸시키라 부탁함.
3: int close(int fd);
● read( )의 사용법
1: // ssize_t는 singed 버스크기를 갖는 자료형이고, 2: // 파일읽기 실패시 -1을 반환하고, 성공시 읽은 자료의 바이트수를 반환한다. 3: // 파일디스크립터와 파일의 내용을 담을 버퍼(메모리)의 주소와 읽을 바이트수를 인자로 넘겨준다. 4: ssize_t read(int fd, void *buf, size_t count); |
● write( )의 사용법
1: // 파일쓰기 실패시 -1을 반환하고, 성공시 쓴 자료의 바이트수를 반환한다. 2: // 파일디스크립터와 파일의 내용이 담긴 버퍼(메모리)의 주소와 쓸 데이터의 바이트수를 인자로 넘긴다. 3: ssize_t write(int fd, const void *buf, size_t count); |
● 덤으로 프로그램예제 p11-9.c
1: //입력 데이터 파일의 내용을 새로운 출력파일을 생성하여 복사하는 프로그램 2: #include <stdio.h>
3: //#include <io.h> 4: #include <string.h> 5: #include <sys/types.h> //pmode 6: #include <sys/stat.h> //pmode 7: #include <fcntl.h> //oflag사용 8:
9: #define BUFFERSIZE 512 10: #define file "d1009.in" 11:
12: int main() 13: {
14: int infd; 15: int bytes; 16: int i; 17: int outfd; 18: char buffer[BUFFERSIZE]; 19: //const char *file = "d1009.in"; 20:
21: close(0); //키보드 닫음 22:
23:
24: //파일오픈-오류 발생시 -1을 반환 25: //if((infd = open("d1009.in", O_RDONLY)) < 0) 26: if((infd = open(file, O_RDONLY)) < 0) 27: {
28: perror("Can't open file d11-9.in\n"); 29: return -1; 30: }
31:
32: //if((outfd = open("d1009.out", O_CREAT | O_WRONLY, S_IWRITE)) < 0) 33: if((outfd = open("d1009.out", O_CREAT | O_WRONLY)) < 0) 34: {
35: printf("Can't open file d11-9.out\n"); 36: return -1; 37: }
38:
39: printf("%d\n", infd); 40: printf("%d\n", outfd); 41:
42: //read()함수는 EOF일 경우 0을 반환 43: while((bytes = read(infd, buffer, BUFFERSIZE)) > 0) 44: {
45: for(i = 0 ; i < bytes ; i++) 46: {
47: putchar(buffer[i]); //화면에 출력 48: }
49:
50: write(outfd, buffer, bytes);
51: }
52:
53:
54: close(infd);
55: close(outfd);
56:
57: return 0; 58: }
|
'내장형하드웨어 > 정리문서' 카테고리의 다른 글
2011년10월27일_vi(비주얼 에디터)에서 비주얼스튜디오와 비슷하게 헤더파일에 어떻게 정의되어 있나 쉽게 알아보자! ctags사용 (0) | 2011.10.27 |
---|---|
2011년9월9일_소리의 속도를 구하는 엑셀시트를 이용해 AT91SAM7S256 MCU(ARM)에 내장된 타이머/카운터의 분주비와 비교매치인터럽트에 사용되는 RC레지스터의 값을 자동으로 구해보자. (2) | 2011.09.09 |
2011년9월7일_정리_소리의 속도 구하는 엑셀시트 (0) | 2011.09.08 |
2011년7월1일_버블정렬, 배열복사방법 (0) | 2011.07.04 |