Linux/UNIX Programming

Slides:



Advertisements
Similar presentations
Linux/UNIX Programming
Advertisements

2장. 프로그램의 기본 구성. 2장. 프로그램의 기본 구성 2-1"Hello, World!" 들여다 보기 /* Hello.c */ #include int main(void) { printf("Hello, World! \n"); return 0;
Understanding of Socket and File I/O
인공지능실험실 석사 2학기 이희재 TCP/IP Socket Programming… 제 11장 프로세스간 통신 인공지능실험실 석사 2학기 이희재
Linux System Programming
제2부 시스템 프로그래밍 파일 및 입출력 2011 가을 숙명여대 창병모 © 숙대 창병모.
Department of Computer Engineering
08. 디바이스 드라이버의 읽기와 쓰기 김진홍
Linux System Programming
데이터 파일 C 데이터 파일과 스트림(Stream) 텍스트 파일 처리
제2장. 파일 입출력 (File I/O) © 숙대 창병모.
Network Lab. Seoung Hyeon, Lee
Department of Computer Science and Engineering
조 병 규 Software Quality Lab. 한국교통대학교
UNIT 07 Memory Map 로봇 SW 교육원 조용수.
Department of Computer Engineering
양방향 파이프의 활용 양방향 통신 파이프는 기본적으로 단방향이므로 양방향 통신을 위해서는 파이프를 2개 생성한다.
12장 파이프.
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
Linux/UNIX Programming APUE (Files & Directories)
DSP Lab. Week 3 My image Doug Young Suh Media Lab. Rm401
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
시스템 호출 read , write의 효율성 lseek test example – test1.c 실습 – 연습문제 2.8
Linux/UNIX Programming
파이프와 exec 시스템 호출 (ls | wc)
파일 기술자 복사 파일 기술자 복사 : dup(2) 파일 기술자 복사 : dup2(3)
8 메모리 매핑.
파일 기술자 파일 기술자 현재 열려있는 파일을 구분하는 정수값 저수준 파일 입출력에서 열린 파일을 참조하는데 사용
4장 파일.
임베디드 실습 # LED, 7’Segment 제어
Linux/UNIX Programming
메시지 큐[5] – test1.c 메시지 제어: msgctl(2) #include <sys/msg.h>
File I/O, TCP, Serial 입니다. 죄송합니다 ㅠ_ㅠ
DK-128 실습 EEPROM 제어 아이티즌 기술연구소
2007 1학기 11 프로젝트 기초 실습.
13장 고급 입출력 함수 박사 4학기 최 성자.
파일 접근권한 제어 stat 구조체의 st_mode 항목에 파일의 종류와 접근권한 정보저장 st_mode 값의 구조.
TCP/IP Socket Programming…
Socket Address Structure and Byte Ordering Functions
FILE I/O 번째주 Dept. of Computer Science & Engineering
11장. 1차원 배열.
Department of Computer Engineering
Linux Programming Spring 2008
13장 프로세스 사이의 통신.
Linux/UNIX Programming
UNIT 07 Memory Map 로봇 SW 교육원 조용수.
Memory & Data Management.
Linux/UNIX Programming
24장. 파일 입출력.
Linux/UNIX Programming
19. 함수 포인터와 void 포인터.
네트워크 프로그래밍의 이해 School of Electronics and Information.
DK-128 실습 내부 EEPROM 제어 아이티즌 기술연구소 김태성 연구원
Linux/UNIX Programming
Linux/UNIX Programming
Linux/UNIX Programming
Canary value 스택 가드(Stack Guard).
PHP 웹 프로그래밍 (PHP Web Programming) 미리 정의된 함수 문양세 강원대학교 IT대학 컴퓨터과학전공.
소리 편집 안 재 형.
구조체(struct)와 공용체(union)
Chapter 12 파일 입출력.
바이트 순서 변환 함수 주소 변환 함수 바이트 조작 함수 원격지 호스트 정보를 얻는 함수
실습과제 (변수와 자료형, ) 1. 다음 작업 (가), (나), (다)를 수행하는 프로그램 작성
Department of Computer Engineering
06. 디바이스의 등록과 해제 김진홍
File IO 정보물리.
3장 파일 다루기 한빛미디어(주).
Linux/UNIX Programming
Linux/UNIX Programming
Presentation transcript:

Linux/UNIX Programming APUE (File I/O) 문양세 강원대학교 IT대학 컴퓨터과학전공

강의 목표 및 내용 강의 목표 강의 내용 파일의 특성을 이해한다. 파일을 열고 닫는다. 파일로부터 데이터를 읽고 쓴다. APUE (File I/O) 강의 목표 파일의 특성을 이해한다. 파일을 열고 닫는다. 파일로부터 데이터를 읽고 쓴다. 기타 파일 제어 함수를 익힌다. 강의 내용 파일 구조 (Linux/Unix 파일은 어떤 구조일까?) 파일 관련 시스템 호출 시스템 호출의 효율과 구조

What is a File? APUE (File I/O) A file is a contiguous sequence of bytes. (Linuxx/Unix에서 파일은 연속적인 바이트 시퀀스로 볼 수 있다.) No format imposed by the operating system. (Linux/Unix 운영체제는 파일에 특별한 Format을 부여치 않는다.) Each byte is individually addressable in a disk file. (파일의 각 바이트는 고유의 주소를 가지고(매길 수) 있다.)

File Descriptor (1/2) open() returns an fd, an integer value. APUE (File I/O) open() returns an fd, an integer value. Used in subsequent I/O operations on that file. (Open된 파일의 fd는 이후 File I/O 연산에 사용된다.) close(fd) closes that file described by fd. All of a process's open files are automatically closed when it terminates. (프로세스가 종료되면, 해당 프로세스가 Open한 파일은 자동적으로 Close된다.)

File Descriptor (2/2) APUE (File I/O) file descriptor: 0 ~ N (N = 19? or more) // unistd.h Value Meaning standard input 1 standard output 2 standard error 3 .. 19 fds for users

파일 관련 System Calls open() – 열기 creat() - 파일 생성 close() – 닫기 APUE (File I/O) open() – 열기 creat() - 파일 생성 close() – 닫기 read() – 읽기 write() – 쓰기 lseek() - 이동

open() – 파일 열기 파일을 연다. 파일이 없으면 경우에 따라 새로 만들어 질 수도 있다. APUE (File I/O) #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> int open (const char *pathname, int oflag, [ mode_t mode ]); 파일을 연다. 파일이 없으면 경우에 따라 새로 만들어 질 수도 있다. pathname : 파일의 이름 mode : 파일의 access permission 값으로, 생략가능 새로운 파일을 만드는 경우에만 사용됨 (creat() 함수 설명 참조) 리턴 값 : 파일 식별자(file descriptor), 실패하면 -1

open()의 파라미터 (1/2) 두 번째 파라미터 oflag는 다음 상수들의 (logical) OR이다. APUE (File I/O) 두 번째 파라미터 oflag는 다음 상수들의 (logical) OR이다. 예 int fd; fd = open("afile", O_RDWR | O_CREAT, 0644); 열기 모드에 대해서, 반드시 하나를 지정해 주어야 한다. O_RDONLY : 읽기 모드, write 함수를 사용 할 수 없음 O_WRONLY : 쓰기 모드, read 함수를 사용 할 수 없음 O_RDWR : 읽고 쓰기 모드, read 및 write 사용 가능

open()의 파라미터 (2/2) 선택적 지정 가능 플래그 APUE (File I/O) 선택적 지정 가능 플래그 O_APPEND : 모든 write 된 데이터는 파일의 끝에 추가된다. O_CREAT : 파일이 없을 경우 파일을 생성한다(이 경우, 세 번째 인자 mode가 사용). O_EXCL : 그 이름의 파일이 이미 있고 O_CREAT를 지정한 경우 에러를 발생시킨다. O_TRUNC : 파일이 있는 경우에 기존 내용을 지우고, 파일 크기를 0으로 만든다. O_SYNC : 각 write 함수 호출은 디스크에 물리적으로 쓰여진 후 리턴한다

예제: open.c APUE (File I/O)

creat() – 파일 생성 새로운 파일을 생성한다. #include <sys/types.h> APUE (File I/O) #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> int creat ( const char *pathname, mode_t mode ); 새로운 파일을 생성한다. pathname : 파일의 이름 mode : 파일의 access permission 값 리턴 값 : 파일 식별자(file descriptor), 실패하면 -1

creat()의 파라미터 다음 두 함수의 호출은 동일한 기능을 수행함 APUE (File I/O) 다음 두 함수의 호출은 동일한 기능을 수행함 fd = creat ( pathname, mode ); fd = open ( pathname, O_WRONLY | O_CREAT | O_TRUNC, mode); 두 번째 파라미터인 mode는 permission mode를 나타냄 0644  -rw-r--r-- 0755  -rwxr-xr-x 0444  -r--r--r--

close() – 파일 닫기 작업이 끝난 후 파일을 닫는다. APUE (File I/O) #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> int close ( int filedesc ); 작업이 끝난 후 파일을 닫는다. 파일을 닫지 않더라도 프로세스가 종료하면, 모든 열려진 파일들은 자동적으로 닫힌다. filedesc : 닫고자 하는 파일의 파일 식별자 (File Descriptor) 리턴 값 : 파일 식별자(file descriptor), 실패하면 -1

read() – 파일 읽기 (1/2) 파일에서 데이터를 읽는다. buf: 읽은 데이터를 저장할 메모리 (버퍼) APUE (File I/O) #include <unistd.h> ssize_t read ( int filedes, void *buf, size_t nbytes ); 파일에서 데이터를 읽는다. buf: 읽은 데이터를 저장할 메모리 (버퍼) nbytes: 읽을 데이터의 바이트 수 리턴 값 성공하면 읽은 바이트 수 (nbytes와 다를 수(작을 수) 있음) 파일의 끝을 만나면 0 실패하면 -1

read() – 파일 읽기 (2/2) 읽을 데이터가 충분하면 한 번에 nbytes 만큼 읽는다. APUE (File I/O) 읽을 데이터가 충분하면 한 번에 nbytes 만큼 읽는다. 읽을 데이터가 nbytes 보다 적은 경우 더 적게 읽기도 한다. 파일의 끝에 다다른 경우 네트워크 입출력을 수행하는 경우 참고 size_t : unsigned integer ssize_t : signed integer

예제: count.c (문자 수 세는 프로그램) (1/2) APUE (File I/O)

예제: count.c (문자 수 세는 프로그램) (2/2) APUE (File I/O)

write() – 파일 쓰기 파일에 데이터를 쓴다. buf: 쓸 데이터를 저장한 메모리 (버퍼) APUE (File I/O) #include <unistd.h> ssize_t write (int filedes, const void *buf, size_t nbytes); 파일에 데이터를 쓴다. buf: 쓸 데이터를 저장한 메모리 (버퍼) nbytes: 쓸 데이터의 바이트 수 리턴 값 성공하면, 파일에 쓰여진 데이터의 바이트 수 (nbytes보다 작을 수 있음) 실패하면 -1

lseek() – 오프셋(커서) 이동 (1/2) APUE (File I/O) #include <sys/types.h> #include <unistd.h> off_t lseek (int filedes, off_t offset, int whence ); 파일의 현재 위치(current file offset)를 이동한다. 파라미터 설명 whence: (이동을 시작할) 위치의 기준점 SEEK_SET : 파일의 시작점을 기준으로 이동 SEEK_CUR : 현재 위치를 기준으로 이동 SEEK_END : 파일의 끝을 기준으로 이동 offset: 기준점에서의 상대적인 거리 (byte 단위) SEEK_CUR, SEEK_END 와 같이 쓰일 때는 음수도 가능 리턴 값: 성공하면 이동한 현재 위치를 리턴, 실패하면 -1

lseek() – 오프셋(커서) 이동 (2/2) APUE (File I/O) 파일의 현재 위치(오프셋)를 임의의 위치로 이동한다 파일의 현재 위치(current file offset) 파일에 대한 읽기/쓰기는 파일의 현재 위치에서 실행된다. 파일을 처음 열면 현재 위치는 0, 즉 파일의 시작이다. 읽기/쓰기 후 파일의 현재 위치는 읽기/쓰기 한 byte 수 만큼 저절로 뒤로 이동된다. lseek()를 사용하여 임의의 위치로 파일의 현재 위치를 이동할 수 있다

예제: lseek1.c (1/3) APUE (File I/O)

예제: lseek1.c (2/3) lseek1.c 의 출력 파일 “file.hole”의 내용 APUE (File I/O) lseek1.c 의 출력 파일 “file.hole”의 내용 Linux/Unix 명령어인 od (octal dump)를 사용하여 확인할 수 있음 1 2 3 4 5 6 7 8 9 a b c d e f g h i j 10 \0 20 30 40 A B C D E F G H I J

예제: lseek1.c (3/3) APUE (File I/O)

fcntl() – 파일 제어 역할: 파일의 속성을 알아내거나 변경한다. APUE (File I/O) #include <sys/types.h> #include <fcntl.h> #include <unistd.h> int fcntl (int filedes, int cmd, … /* int arg */ ); 역할: 파일의 속성을 알아내거나 변경한다. cmd: F_GETFL, F_SETFL, F_GETFD, F_SETFD, F_DUPFD, … 리턴 값 성공인 경우: 파라미터인 cmd에 따라 다름 실패인 경우: -1

fcntl()의 주요 사용법 F_GETFL : file table 의 file status flags를 리턴 APUE (File I/O) F_GETFL : file table 의 file status flags를 리턴 F_SETFL : file status flags 를 설정 File status flag Description O_RDONLY O_WRONLY O_RDWR open for reading only open for writing only open for reading and writing O_APPEND O_NONBLOCK O_SYNC O_ASYNC append on each write nonblocking mode wait for writes to complete asynchoronouse I/O

예제: fileflags.c (1/2) APUE (File I/O)

예제: fileflags.c (2/2) APUE (File I/O)

에러 처리 파라미터 errno 값에 해당하는 에러 메시지를 리턴한다. 표준 에러에 다음과 같은 순서로 메시지를 출력한다. APUE (File I/O) 파라미터 errno 값에 해당하는 에러 메시지를 리턴한다. 표준 에러에 다음과 같은 순서로 메시지를 출력한다. msg 출력 문자열 ": " 출력 시스템 전역 변수(system global variable) errno 값에 해당하는 에러 메시지 출력 #include <stdio.h> void perror(const char *msg);

write_num.c / read_num.c (1/3) APUE (File I/O)

write_num.c / read_num.c (2/3) APUE (File I/O)

write_num.c / read_num.c (3/3) APUE (File I/O)