파일 기술자 파일 기술자 현재 열려있는 파일을 구분하는 정수값 저수준 파일 입출력에서 열린 파일을 참조하는데 사용

Slides:



Advertisements
Similar presentations
Format String Attack! 포맷 스트링 공격 경일대학교 사이버보안학과 학년 남주호.
Advertisements

Linux/UNIX Programming
Understanding of Socket and File I/O
6 레이스 컨디션.
Linux System Programming
Department of Computer Engineering
9 파이프.
08. 디바이스 드라이버의 읽기와 쓰기 김진홍
Linux System Programming
데이터 파일 C 데이터 파일과 스트림(Stream) 텍스트 파일 처리
제2장. 파일 입출력 (File I/O) © 숙대 창병모.
Network Lab. Seoung Hyeon, Lee
Department of Computer Science and Engineering
조 병 규 Software Quality Lab. 한국교통대학교
레이스 컨디션.
쉽게 풀어쓴 C언어 Express 제17장 동적메모리와 연결리스트 C Express Slide 1 (of 13)
Department of Computer Engineering
양방향 파이프의 활용 양방향 통신 파이프는 기본적으로 단방향이므로 양방향 통신을 위해서는 파이프를 2개 생성한다.
12장 파이프.
fork로 생성한 자식 프로세스에서 exec 함수군을 호출
Root Filesystem Porting
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
링크 파일 생성[1] 링크 하드링크 생성 : link(2) 이미 있는 파일이나 디렉토리에 접근할 수 있는 새로운 이름
3 파일과 디렉토리.
Linux/UNIX Programming APUE (Files & Directories)
프로세스 생성[1] 프로그램 실행 : system(3) #include <stdlib.h>
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
Linux/UNIX Programming
파이프와 exec 시스템 호출 (ls | wc)
Root Filesystem Porting
파일 기술자 복사 파일 기술자 복사 : dup(2) 파일 기술자 복사 : dup2(3)
8 메모리 매핑.
HW #4 파일과 디렉토리 1. 자신의 HOME 디렉토리 아래에 다음과 같은 구조의 디렉토리 및 파일을 생성하고, 이 구조를 다음 명령을 사용하여 파일로 저장한 후, 이를 프린트하여 제출한다. $ ls –lR linux_unix > hw4-1 $HOME linux_unix.
(ioctl, mmap, fsync&flush)
4장 파일.
임베디드 실습 # LED, 7’Segment 제어
Linux/UNIX Programming
메시지 큐[5] – test1.c 메시지 제어: msgctl(2) #include <sys/msg.h>
File I/O, TCP, Serial 입니다. 죄송합니다 ㅠ_ㅠ
Department of Computer Engineering
13장 고급 입출력 함수 박사 4학기 최 성자.
파일 접근권한 제어 stat 구조체의 st_mode 항목에 파일의 종류와 접근권한 정보저장 st_mode 값의 구조.
TCP/IP Socket Programming…
FILE I/O 번째주 Dept. of Computer Science & Engineering
11장. 1차원 배열.
Department of Computer Engineering
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
Linux Programming Spring 2008
Linux/UNIX Programming
HW #4 UNIX 파일과 디렉토리 1. 자신의 HOME 디렉토리 아래에 다음과 같은 구조의 디렉토리 및 파일을 생성하고, 이 구조를 다음 명령을 사용하여 파일로 저장한 후, 이를 프린트하여 제출한다. $ ls –lR linux_unix > hw4-1 $HOME linux_unix.
24장. 파일 입출력.
네트워크 프로그래밍의 이해 School of Electronics and Information.
3 파일과 디렉토리.
Stepper Motor 디바이스 드라이버
컴퓨터 프로그래밍 기초 - 8th : 함수와 변수 / 배열 -
Linux/UNIX Programming
Linux/UNIX Programming
4. 셸을 이용한 명령어 입력. Unix 시스템 쉘 간단한 셸 명령 명령 매개변수(Command arguments)
구조체(struct)와 공용체(union)
Chapter 12 파일 입출력.
실습과제 (변수와 자료형, ) 1. 다음 작업 (가), (나), (다)를 수행하는 프로그램 작성
동적메모리와 연결 리스트 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
9 파이프.
Department of Computer Engineering
06. 디바이스의 등록과 해제 김진홍
1. 지역변수와 전역변수 2. auto, register 3. static,extern 4. 도움말 사용법
개정판 누구나 즐기는 C언어 콘서트 제13장 동적 메모리 출처: pixabay.
3장 파일 다루기 한빛미디어(주).
2019 2학기 9장 배열과 포인터 1. 주소, 주소연산자(&) 2. 포인터, 역참조연산자(*) 3. 배열과 포인터.
Presentation transcript:

파일 기술자 파일 기술자 현재 열려있는 파일을 구분하는 정수값 저수준 파일 입출력에서 열린 파일을 참조하는데 사용 0번 : 표준 입력, 1번 : 표준 출력, 2번 : 표준 오류

파일 생성과 열고 닫기[1] 파일 열기: open(2) #include <sys/types.h> path에 지정한 파일을 oflag에 지정한 플래그 값에 따라 열고 파일기술자를 리턴 oflag 값 #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> int open(const char *path, int oflag [, mode_t mode]); 종류 기능 O_RDONLY 파일을 읽기 전용으로 연다. O_WRONLY 파일을 쓰기 전용으로 연다. O_RDWR 파일을 읽기와 쓰기가 가능하게 연다. O_CREAT 파일이 없으면 파일을 생성한다 O_EXCL O_CREAT 옵션과 함께 사용할 경우 기존에 없는 파일이면 파일을 생성하지만, 파일이 이미 있으면 파일을 생성하지 않고 오류 메시지를 출력한다. O_APPEND 파일의 맨 끝에 내용을 추가한다. O_TRUNC 파일을 생성할 때 이미 있는 파일이고 쓰기 옵션으로 열었으면 내용을 모두 지우고 파일의 길이를 0으로 변경한다. O_NONBLOCK/O_NDELAY 비블로킹(Non-blocking) 입출력 O_SYNC/O_DSYNC 저장장치에 쓰기가 끝나야 쓰기 동작을 완료

mode=S_IRUSR | S_IWUSR; 파일 생성과 열고 닫기[2] 파일 열기: open(2) mode : 파일 접근권한 지정, 0644같이 숫자나 플래그 값으로 지정 가능 mode=S_IRUSR | S_IWUSR;

파일 생성과 열고 닫기[3] 파일 생성 : creat(2) 파일 닫기: close(2) 파일 생성 함수, open 함수에 파일 생성 기능이 없던 구버전 유닉스에서 사용 open 함수와 달리 옵션을 지정하는 부분이 없다. creat 함수로 파일을 생성하면 파일 기술자를 리턴하므로 별도로 open할 필요 없음 파일 닫기: close(2) 프로세스에서 열 수 있는 파일 개수가 제한되어 있으므로 파일의 사용이 끝나면 닫아야 한다. #include <sys/stat.h> #include <fcntl.h> int creat(const char *path, mode_t mode); #include <unistd.h> int close(int fildes);

[예제 2-1] 새 파일 열고 닫기 ex2_1.c 01 #include <sys/types.h> 02 #include <sys/stat.h> 03 #include <fcntl.h> 04 #include <unistd.h> 05 #include <stdlib.h> 06 #include <stdio.h> 07 08 int main(void) { 09 int fd; 10 mode_t mode; 11 12 mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH; 13 14 fd = open("unix.txt", O_CREAT, mode); 15 if (fd == -1) { 16 perror("Creat"); 17 exit(1); 18 } 19 close(fd); 20 21 return 0; 22 } # ls unix.txt unix.txt: 해당 파일이나 디렉토리가 없음਺ # gcc -o ex2_1.out ex2_1.c # ex2_1.out# ls -l unix.txt -rw-r--r-- 1 root other 0 1월 6일 13:10 unix.txt 접근권한:644

[예제 2-2] O_EXCL 플래그 사용하기 01 #include <sys/types.h> 02 #include <sys/stat.h> 03 #include <fcntl.h> 04 #include <unistd.h> 05 #include <stdlib.h> 06 #include <stdio.h> 07 08 int main(void) { 09 int fd; 10 11 fd = open("unix.txt", O_CREAT | O_EXCL, 0644); 12 if (fd == -1) { 13 perror("Excl"); 14 exit(1); 15 } 16 close(fd); 17 18 return 0; 19 } # ls unix.txt unix.txt # ex2_2.out Excl: File exists # rm unix.txt # ex2_2.out # ls unix.txt unix.txt

새로 생성한 파일은 가장 작은 번호인 0번이 할당된다. [예제 2-3] 파일 기술자 할당 ex2_3.c 01 #include <sys/types.h> 02 #include <sys/stat.h> 03 #include <fcntl.h> 04 #include <unistd.h> 05 #include <stdlib.h> 06 #include <stdio.h> 07 08 int main(void) { 09 int fd; 10 11 close(0); 12 13 fd = open("unix.txt", O_RDWR); 14 if (fd == -1) { 15 perror("Excl"); 16 exit(1); 17 } 18 19 printf("unix.txt : fd = %d\n", fd); 20 close(fd); 21 22 return 0; 23 } # ex2_3.out unix.txt : fd = 0 11행에서 0번을 닫았으므로 새로 생성한 파일은 가장 작은 번호인 0번이 할당된다.

파일 읽기와 쓰기 파일 읽기 : read(2) 파일 쓰기 : write(2) #include <unistd.h> 파일에서 nbytes로 지정한 크기만큼 바이트를 읽어서 buf에 저장 실제로 읽어온 바이트 개수를 리턴 리턴값이 0이면 파일의 끝에 도달했음을 의미 파일의 종류에 상관없이 무조건 바이트 단위로 읽어온다. 파일 쓰기 : write(2) buf가 가리키는 메모리에서 nbytes로 지정한 크기만큼 파일에 기록 실제로 쓰기를 수행한 바이트 수를 리턴 #include <unistd.h> ssize_t read(int fildes, void *buf, size_t nbytes); #include <unistd.h> ssize_t write(int fildes, const void *buf, size_t nbytes);

[예제 2-4] 파일 읽기 01 #include <fcntl.h> [예제 2-4] 파일 읽기 ex2_4.c 01 #include <fcntl.h> 02 #include <unistd.h> 03 #include <stdlib.h> 04 #include <stdio.h> 05 06 int main(void) { 07 int rfd, wfd, n; 08 char buf[10]; 09 10 rfd = open("unix.txt", O_RDONLY); 11 if(rfd == -1) { 12 perror("Open unix.txt"); 13 exit(1); 14 } 15 16 wfd = open("unix.bak", O_CREAT | O_WRONLY | O_TRUNC, 0644); 17 if (wfd == -1) { 18 perror("Open unix.bak"); 19 exit(1); 20 } 21 파일기술자 2개 선언

[예제 2-4] 파일 읽기 22 while ((n = read(rfd, buf, 6)) > 0) [예제 2-4] 파일 읽기 22 while ((n = read(rfd, buf, 6)) > 0) 23 if (write(wfd, buf, n) != n) perror("Write"); 24 25 if (n == -1) perror("Read"); 26 27 close(rfd); 28 close(wfd); 29 30 return 0; 31 } 6바이트씩 읽어온다 # ls unix.bak unix.bak: 해당 파일이나 디렉토리가 없음 # ex2_5.out # cat unix.bak Unix System Programming

[예제 2-5] 파일 읽고 쓰기 ... 06 int main(void) { 07 int rfd, wfd, n; [예제 2-5] 파일 읽고 쓰기 ex2_5.c ... 06 int main(void) { 07 int rfd, wfd, n; 08 char buf[10]; 09 10 rfd = open("unix.txt", O_RDONLY); 11 if(rfd == -1) { perror("Open unix.txt"); 13 exit(1); 14 } 15 16 wfd = open("unix.bak", O_CREAT | O_WRONLY | O_TRUNC, 0644); 17 if (wfd == -1) { 18 perror("Open unix.bak"); 19 exit(1); 20 } 21 22 while ((n = read(rfd, buf, 6)) > 0) 23 if (write(wfd, buf, n) != n) perror("Write"); 24 파일기술자 2개 선언 6바이트씩 읽어온다

[예제 2-5] 파일 읽고 쓰기 25 if (n == -1) perror("Read"); 26 27 close(rfd); [예제 2-5] 파일 읽고 쓰기 25 if (n == -1) perror("Read"); 26 27 close(rfd); 28 close(wfd); 29 30 return 0; 31 } # ls unix.bak unix.bak: 해당 파일이나 디렉토리가 없음਺ # ex2_5.out # cat unix.bak Unix System Programming

1024K의 integer를 생성한 후 읽기 및 화면 출력 실습 1024K의 integer를 생성한 후 읽기 및 화면 출력 data size를 반드시 확인 open flag등을 배운 내용대로 실습해 볼 것 예제 2-5를 두 이름대신 file descriptor를 받아들이도록 수정할 것 argc와 argv를 이용하여 command line에서 파일 이름을 받아들이도록 수정할 것