Microsoft PowerPoint - Lecture 4-1 Linux File Environment.ppt [호환 모드]

Similar documents
chap7.key

슬라이드 1

歯9장.PDF

학번 : 이름 : 1. 다음파일트리구조를가진유닉스시스템이있다고가정하자. / /bin/ /home/ /home/taesoo/ /usr/ /usr/lib/ /usr/local/lib /media 모든폴더에파일이하나도없다고가정했을때사용자가터미널에서다음 ls 명령입력시화면출력

제1장 Unix란 무엇인가?

제12장 파일 입출력

Microsoft PowerPoint - 제11강 파일 처리

Microsoft PowerPoint - chap4 [호환 모드]

10.

Microsoft PowerPoint - chap13-입출력라이브러리.pptx

금오공대 컴퓨터공학전공 강의자료

Microsoft PowerPoint APUE(Intro).ppt

Microsoft PowerPoint APUE(File InO).pptx

PowerPoint 프레젠테이션

PowerPoint Template

2009년 상반기 사업계획

학번 : 이름 : 1. 다음파일트리구조를가진유닉스시스템이있다. / /bin/ /home/ /home/taesoo/ /home/taesoo/downloads /usr/ /usr/lib/ /usr/local/lib /media 모든폴더에파일이하나도없다고가정했을때사용자 (t

슬라이드 1

PowerPoint 프레젠테이션

디바이스드라이버 (Device Driver) Driver is literally a subject which drive a object. 응용프로그램에서하드웨어장치를이용해서데이터를직접읽고쓰거나제어해야하는경우에디바이스드라이버를이용 하드웨어를제어하는프로그램과애플리케이션에서

<4D F736F F F696E74202D FC6C4C0CF20C0D4C3E2B7C2205BC8A3C8AF20B8F0B5E55D>

제1장 Unix란 무엇인가?

Microsoft PowerPoint - chap2

Microsoft PowerPoint - ch09_파이프 [호환 모드]

2009년 상반기 사업계획

Microsoft PowerPoint APUE(File InO).ppt

PowerPoint 프레젠테이션

<4D F736F F F696E74202D2034C5D8BDBAC6AEC6C4C0CFC0D4C3E2B7C2312E505054>

PowerPoint 프레젠테이션

C Programming

BMP 파일 처리

Microsoft PowerPoint APUE(File InO)

Microsoft PowerPoint - 09_(C_Programming)_(Korean)_File_Processing

PowerPoint 프레젠테이션

Microsoft PowerPoint - 09_FileSystem

Microsoft PowerPoint - 10_C_Language_Text_Files

PowerPoint 프레젠테이션

/chroot/lib/ /chroot/etc/

제1장 Unix란 무엇인가?

Microsoft PowerPoint - chap12 [호환 모드]

Microsoft PowerPoint - Chap14_FileAccess.pptx

로봇SW교육원 강의자료

3. 다음그림은프로세스의 file table 과 v-node 테이블의연결관계예제이다. 위그림을참고하여두개의서로다른프로세스가같은파일을 open 명령을사용하여열었을때의연결관계를도시하시오. 4. 메모리영역은 low-address 부터 high-adress 까지순서대로나열했을

Microsoft PowerPoint - 09-Pipe

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

PowerPoint 프레젠테이션

Microsoft PowerPoint - Lesson13.pptx

11장 포인터

2007_2_project4

PowerPoint 프레젠테이션

로봇SW교육원 강의자료


Microsoft Word - Network Programming_NewVersion_01_.docx

PowerPoint 프레젠테이션

윤성우의 열혈 TCP/IP 소켓 프로그래밊

Microsoft PowerPoint - 제9강 문자열

<4D F736F F F696E74202D FB8DEB8F0B8AE20B8C5C7CE205BC8A3C8AF20B8F0B5E55D>

Microsoft PowerPoint - chap1 [호환 모드]

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

제1장 Unix란 무엇인가?

untitled

2009년 상반기 사업계획

The Pocket Guide to TCP/IP Sockets: C Version

Microsoft PowerPoint - C프로그래밍-chap15.ppt [호환 모드]

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

슬라이드 1

ABC 11장

제7장 C 표준 파일 입출력

로봇SW교육원 강의자료

강의10

Sena Technologies, Inc. HelloDevice Super 1.1.0

제7장 C 표준 파일 입출력

PowerPoint 프레젠테이션

C# Programming Guide - Types


untitled

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

윤성우의 열혈 TCP/IP 소켓 프로그래밊

Microsoft PowerPoint - chap11.ppt [호환 모드]

Microsoft PowerPoint - a10.ppt [호환 모드]

6주차.key

SRC PLUS 제어기 MANUAL

Computer Programming (2008 Fall)

교육지원 IT시스템 선진화

Microsoft PowerPoint - C프로그래밍-chap16.ppt

Microsoft PowerPoint - chap11-1.ppt [호환 모드]

<4D F736F F F696E74202D20C1A63136C0E520C6C4C0CFC0D4C3E2B7C2>

PowerPoint 프레젠테이션

Microsoft PowerPoint - IOControl [호환 모드]

<C0CCBCBCBFB52DC1A4B4EBBFF82DBCAEBBE7B3EDB9AE2D D382E687770>

PowerPoint 프레젠테이션

Microsoft PowerPoint - lab14.pptx

Microsoft PowerPoint - chap4_2013 [호환 모드]

Microsoft PowerPoint - 알고리즘_4주차_1차시.pptx

Microsoft PowerPoint APUE(Files and Directories).ppt

Microsoft Word - MPC850 SPI Driver.doc

Adobe Flash 취약점 분석 (CVE )

슬라이드 1

Transcription:

Liux Programmig Sprig 2008 File Hadlig

Importat cotets Liux 에서 C 컴파일방법 File 처리프로그래밍 Liux 환경접근프로그래밍 Kogju Natioal Uiversity Liux System Programmig 2/29

Basic compilig method Liux C Compiler : gcc, cc 기본 : % gcc o hello.c %./a.out Object file optio % gcc o hello hello.c %./hello Compiler 도움말 % ma gcc % ifo gcc : 추가정보 Kogju Natioal Uiversity Liux System Programmig 3/29

Header file Header file 위치 /usr/iclude/ 아래에위치 Cf: /usr/iclude/[sys, liux, X11, g++-2] Header file icludig % gcc I/usr/opewi/iclude fred.c 프로그램내 Header file icludig #iclude <stdio.h> Kogju Natioal Uiversity Liux System Programmig 4/29

Library Likig 재사용가능, 공통사용, 미리컴파일된함수위치 : /lib /usr/lib 분류 : 정적라이브러리 :.a 공유라이브러리 :.so,.sa Likig 방법 (default lib directory) % gcc o fred fred.c /usr/lib/libm.a % gcc o fred fred.c -lm Likig 방법 (other lib directory) % gcc o xfred L/usr/opewi/lib xfred.c -Lx11 Kogju Natioal Uiversity Liux System Programmig 5/29

Library Likig (static lib) 정적라이브러리 (static lib) :.a Likig at compile time 메모리자원낭비 동적라이브러리 (dyamic lib) : so.n N: 번호확인방법 : % ldd objectfile compile 방법 lib 생성방법 % gcc c bill.c fred.c % ls *.o bill.o fred.o % gcc c maipgm.c % gcc o rupgm maipgm.o bill.o %./rupgm % ar crv libfoo.a bill.o fred.c ac bill.o ac - fred.o % ralib libfoo.a :BSD 계열에서 % gcc o rupgm maipgm.o libfoo.a %./rupgm Kogju Natioal Uiversity Liux System Programmig 6/29

System Calls System calls 일반적으로사용자프로그램은운영체제직접관여금지 Kerel을직접통한접근금지 System call에의하여운영체제자체인터페이스로접근저수준의함수호출 Kogju Natioal Uiversity Liux System Programmig

File Hadlig Programmig Everythig is FILE i Liux & Uix File property 이름, 생성 / 변경날짜, 허용권한, 길이,iode 정보 Low level file hadlig system call /dev 아래의모든 device 에동일한방법적용 주요 system calls ope(), read(), write() : close(), ioctl() File I/O descriptor 0 ( 표준입력 ), 1 ( 표준출력 ), 3 ( 표준에러 ) Kogju Natioal Uiversity Liux System Programmig 8/29

write() 열린파일이나디바이스에쓰기 #iclude <uistd.h> Size_t write(it fildes,void *buf,size_t bytes); retur=bytes, 0=fail to write, -1=fail to call #iclude <uistd.h> mai() { if ((write(1,"here is some data\",18))!= 18) write(2,"a write error has occurred o file decriptor 1\",47); exit(0); } Kogju Natioal Uiversity Liux System Programmig 9/29

read () 열린파일 / 디바이스로부터읽기 #iclude <uistd.h> Size_t read(it fildes,void *buf,size_t bytes); retur=bytes, 0=fail to write, -1=fail to call #iclude <uistd.h> mai() { char buffer[120]; it read; read = read(0, buffer, 128); if (read == -1) write(2, "A read error has occurred\", 26); if ((write(1,buffer,read))!= read) write(2, "A write error has occurred\",27); exit(0); } Kogju Natioal Uiversity Liux System Programmig 10/29

read testig $echo hello there simple_read hello there $ simple_read < test.txt.. Kogju Natioal Uiversity Liux System Programmig 11/29

ope() 파일 / 디바이스열기 #iclude <fctl.h> #iclude <sys/types.h> : POSIX에서불필요 #iclude <sys/stat.h> : POSIX에서불필요 it ope(cost char *path, it oflags); it ope(cost char *path, it oflags, mode_t mode); retur : >0( 성공 ), -1( 실패, erro: 실패원인 ) oflags : O_RDONLY : 읽기전용상태로연다 O_WRONLY : 쓰기전용상태로연다 O_RDWR : 읽기와쓰기가가능한상태로연다그외 oflags의비트조합으로사용가능 O_APPEND, O_TRUNC( 기존내용제거후 ), O_CREAT( 필요시생성 ), O_EXCL(O_CREAT와함께, 배타적사용 ) Kogju Natioal Uiversity Liux System Programmig 12/29

ope() mode_t S_IRUSR,S_IWUSR,S_IXUSR : 사용자읽기, 쓰기, 실행 S_IRGRP,S_IWGRP,S_IXGRP : 그룹읽기, 쓰기, 실행 S_IROTH,S_IWOTH,S_IXOTH : 기타사용자읽기, 쓰기, 실행 ope( myfile,o_creat, S_IRUSR S_IXOTH); Kogju Natioal Uiversity Liux System Programmig 13/29

close () 파일 / 디바이스닫기 #iclude <uistd.h> it close(it fildes); retur : 0( 성공 ), -1( 실패 ) Kogju Natioal Uiversity Liux System Programmig 14/29

저수준함수파일복사 1 byte #iclude <uistd.h> #iclude <sys/stat.h> #iclude <fctl.h> { mai() char c; it i, out; i = ope("file.i", O_RDONLY); out = ope("file.out", O_WRONLY O_CREAT, S_IRUSR S_IWUSR); while(read(i,&c,1) > 0) write(out,&c,1); } exit(0); Kogju Natioal Uiversity Liux System Programmig 15/29

저수준함수를이용한파일복사 1024bytes #iclude <uistd.h> #iclude <sys/stat.h> #iclude <fctl.h> { mai() char block[1024]; it i, out; it read; i = ope("file.i", O_RDONLY); out = ope("file.out", O_WRONLY O_CREAT, S_IRUSR S_IWUSR); while((read = read(i,block,sizeof(block))) > 0) write(out,block,read); } exit(0); Kogju Natioal Uiversity Liux System Programmig 16/29

Exercise : file copy(1 char) #iclude <uistd.h> #iclude <sys/stat.h> #iclude <fctl.h> mai() { char c; it i, out; i = ope("file.i", O_RDONLY); out = ope("file.out", O_WRONLY O_CREAT, S_IRUSR S_IWUSR); while(read(i, &c, 1) == 1) write(out, &c, 1); } exit(0); Kogju Natioal Uiversity Liux System Programmig 17/29

File maagemet system calls 파일사용방법제어, 상태정보파악 주요 system calls lseek #iclude <uistd.h> #iclude <sys/types.h> off_t lseek(it fildes, off_t offset, it whece); whece : SEEK_SET : 절대 offset 위치 SEEK_CUR : 현재위치에서상대위치 SEEK_END : 파일의마지막에위치 Kogju Natioal Uiversity Liux System Programmig 18/29

cotiued! fstat, stat & lstat File descriptor 관관련된파일의상태정보파악 #iclude <uistd.h> #iclude <sys/stat.h> #iclude <sys/types.h> it fstat(it fildes, struct stat *buf); it stat(cost char *path, struct stat *buf); :lik 가참조하는파일정보 it lstat(cost char *path, struct stat *buf); :symbolic lik 자체정보 * 자세한사항은필요시 %ma fstat Kogju Natioal Uiversity Liux System Programmig 19/29

cotiued! dup & dup2 파일을접근하는두개이상의 descriptor 생성 하나의파일에대하여두개의접근이가능토록 #iclude <uistd.h> it dup(it fildes); : retur value 는새로운 file descriptor it dup2(it fildes, it fildes2); : fildes2 에복제 Kogju Natioal Uiversity Liux System Programmig 20/29

Programmig Exercise Programmig Exercise 1 Read from ope file with 1024 bytes readig(1 block) 1. declare char buf[1024] 2. i while loop, coditio should be chaged read(,buf,size..) Programmig Exercise 2 touch 명령어와유사한기능, 단파라메터로파일 permissio mode줄수있도록 Ex: mytouch r w r Programmig Exercise 3 cp 명령어와유사한기능, 단파일만 copy Due date : ext week, uploadig methods will be provided Kogju Natioal Uiversity Liux System Programmig 21/29

Stadard I/O library Low level I/O 의불편함해소공통적인라이브러리제공 Head file : stdio.h 주요 fuctio calls fope, fclose fread, fwrite fflush, fseek fgetc, getc, getchar fputc, putc, putchar pritf, fpritf, spritf scaf, fscaf, sscaf Kogju Natioal Uiversity Liux System Programmig 22/29

fope(), fclose() #iclude <stdio.h> FILE *fope(cost char *fileame,cost char *mode); mode : r, w, a r+, w+, a+ : + = 갱신상태로 it fclose(file *stream) } Kogju Natioal Uiversity Liux System Programmig 23/29

Ex : File copy #iclude <stdio.h> mai(it argc, char *argv[]) { FILE *ifile, *outfile; char buf[256]; if(argc!=3) { pritf( ERROR : parameter mismatch\ ); retur;} ifile=fope(argv[1], r ); outfile=fope(argv[2], w ); while(fgets(buf,256,ifile)!=null){ fprif(outfile, %s,buf); } fclose(ifile);fclose(outfile); retur; } Kogju Natioal Uiversity Liux System Programmig 24/29

fgetc(), getc() : 단일문자입력 #iclude <stdio.h> it fgetc(file *stream); it getc(file *stream); macro 로사용 #iclude <stdio.h> FILE *iput; char iputchar; iput=fope( date.i, r ); iputchar=fgetc(iput); fclose(iput); Kogju Natioal Uiversity Liux System Programmig 25/29

fputc(), putc() #iclude <stdio.h> it fputc(it c, FILE *stream); it putc(it c, FILE *stream); macro 로사용주의 : c 는 usiged char #iclude <stdio.h> FILE *iput,*output; char iputchar; iput=fope( date.i, r ); output=fope( data.out, w ); while((iputchar=fgetc(iput))!=eof) { fputc(iputchar,output); } fclose(iput); fclose(output); Kogju Natioal Uiversity Liux System Programmig 26/29

fgets(), gets() : 문자열입력 #iclude <stdio.h> it fgets(char *s,it, FILE *stream); it *gets(char *s); macro 로사용 #iclude <stdio.h> FILE *iput; it maxle=100; char iputstrig[maxle]; iput=fope( date.i, r ); fgets(iputstrig,maxle,iput); fclose(iput); Kogju Natioal Uiversity Liux System Programmig 27/29

fputs(), puts() : 문자열출력 #iclude <stdio.h> it fputs(char *s, FILE *stream); it *puts(cost char *s); macro 로사용 #iclude <stdio.h> FILE *iput,*output; it maxle=126; char istrig; iput=fope( date.i, r ); output=fope( data.out, w ); while((fgets(istrig,maxle,iput)!=null ) { fputs(istrig,output); } fclose(iput); fclose(output); Kogju Natioal Uiversity Liux System Programmig 28/29

fscaf(), fpritf() : 형식화된입출력 #iclude <stdio.h> it fscaf(file *stream, cost char *format, argumet.); it fpritf(file *stream, cost char *format, argumet.); Kogju Natioal Uiversity Liux System Programmig 29/29

Ex: Gradig #iclude <stdio.h> void mai() { FILE *ifile, *outfile; char ame[20]; it kor,mat, eg, tot; if((ifile=fope("data.i","r"))== NULL) { pritf("error: caot ope file data.i\"); } if((outfile=fope("data.out","w"))== NULL) { pritf("error: caot ope file data.out\");} while(fscaf(ifile,"%s%d%d%d",ame,&kor,&mat,&eg)!= EOF){ tot=kor+mat+eg; fpritf(outfile,"%- 8s%3d%5d%5d%5d\",ame,kor,mat,eg,tot); } fclose(ifile); fclose(outfile); } Kogju Natioal Uiversity Liux System Programmig 30/29