<4D F736F F F696E74202D FB8DEB8F0B8AE20B8C5C7CE205BC8A3C8AF20B8F0B5E55D>

Similar documents
2009년 상반기 사업계획

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

2009년 상반기 사업계획

Microsoft PowerPoint - chap12 [호환 모드]

슬라이드 1

제1장 Unix란 무엇인가?

10.

PowerPoint 프레젠테이션

Microsoft PowerPoint - IOControl [호환 모드]

<4D F736F F F696E74202D FC7C1B7CEBCBCBDBA20BBFDBCBAB0FA20BDC7C7E0205BC8A3C8AF20B8F0B5E55D>

2009년 상반기 사업계획

2009년 상반기 사업계획

제12장 파일 입출력

제1장 Unix란 무엇인가?

PowerPoint 프레젠테이션

Microsoft PowerPoint - Lecture_Note_7.ppt [Compatibility Mode]

ECE30076 Embedded System Programming - LED Device Driver

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

좀비프로세스 2

Microsoft PowerPoint - 09-Pipe

ABC 11장

슬라이드 1

chap7.key

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

Microsoft Word - Network Programming_NewVersion_01_.docx

6주차.key

1장. 유닉스 시스템 프로그래밍 개요

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

Microsoft PowerPoint - lab14.pptx

PowerPoint 프레젠테이션

À©µµ³×Æ®¿÷ÇÁ·Î±×·¡¹Ö4Àå_ÃÖÁ¾

Microsoft PowerPoint - chap2

The Pocket Guide to TCP/IP Sockets: C Version

11장 포인터

Microsoft PowerPoint APUE(File InO).ppt

vi 사용법

Microsoft PowerPoint APUE(File InO)

The Pocket Guide to TCP/IP Sockets: C Version

Microsoft PowerPoint APUE(File InO).pptx

ActFax 4.31 Local Privilege Escalation Exploit

PowerPoint 프레젠테이션

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

untitled

로봇SW교육원 강의자료

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

슬라이드 1

2009년 상반기 사업계획

/chroot/lib/ /chroot/etc/

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

Microsoft PowerPoint - 13 ¼ÒÄÏÀ» ÀÌ¿ëÇÑ Åë½Å 2.ppt

슬라이드 1

제9장 프로세스 제어

로봇SW교육원 강의자료

PowerPoint 프레젠테이션

Microsoft PowerPoint - chap10-함수의활용.pptx

이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다. 2

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

<4D F736F F F696E74202D FC6C4C0CF20C0D4C3E2B7C2205BC8A3C8AF20B8F0B5E55D>

PowerPoint 프레젠테이션

K&R2 Reference Manual 번역본

Microsoft PowerPoint - 09_FileSystem

Microsoft PowerPoint - 10_Process

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조

untitled

교육지원 IT시스템 선진화

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CC0E7B0EDB0FCB8AE5C53746F636B5F4D616E D656E74732E637070>

UI TASK & KEY EVENT

vi 사용법

Microsoft PowerPoint - lab15.pptx

버퍼오버플로우-왕기초편 10. 메모리를 Hex dump 뜨기 앞서우리는버퍼오버플로우로인해리턴어드레스 (return address) 가변조될수있음을알았습니다. 이제곧리턴어드레스를원하는값으로변경하는실습을해볼것인데요, 그전에앞서, 메모리에저장된값들을살펴보는방법에대해배워보겠습

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100

The Pocket Guide to TCP/IP Sockets: C Version

강의10

Microsoft PowerPoint - [2009] 02.pptx

API 매뉴얼

Microsoft PowerPoint - chap11-포인터의활용.pptx

제1장 Unix란 무엇인가?

로봇SW교육원 강의자료

BMP 파일 처리

본 강의에 들어가기 전

Chapter 4. LISTS

Microsoft PowerPoint - chap06-2pointer.ppt

5.스택(강의자료).key

Microsoft PowerPoint - Lecture_Note_5.ppt [Compatibility Mode]

제1장 Unix란 무엇인가?

Microsoft PowerPoint - ch07 - 포인터 pm0415

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>

various tricks for remote linux exploits v3.pptx

Microsoft PowerPoint - chap05-제어문.pptx

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

<4D F736F F F696E74202D20C1A63137C0E520B5BFC0FBB8DEB8F0B8AEBFCD20BFACB0E1B8AEBDBAC6AE>

KNK_C_05_Pointers_Arrays_structures_summary_v02

목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2

Frama-C/JESSIS 사용법 소개

PowerPoint 프레젠테이션

chap12(process).hwp

Transcription:

학습목표 통신프로그램이무엇인지이해한다. 을이용한 IPC 기법을이해한다. 함수를사용해프로그램을작성할수있다. IT CookBook, 유닉스시스템프로그래밍 2/20 목차 의개념 함수 해제함수 의보호모드변경 파일의크기확장 매핑된메모리동기화 데이터교환하기 의개념 파일을프로세스의메모리에매핑 프로세스에전달할데이터를저장한파일을직접프로세스의가상주소공간으로매핑 read, write 함수를사용하지않고도프로그램내부에서정의한변수를사용해파일에서데이터를읽거나쓸수있음 과기존방식의비교 기존방식 fd = open( ); lseek(fd, offset, whence); read(fd, buf, len); 함수사용 3/20 fd = open( ); addr = mmap((caddr_t)0, len, (PROT_READ PROT_WRITE), MAP_PRIVATE, fd, offset); read 함수를사용하지않고도데이터접근가능 4/20

함수 : mmap(2) void *mmap(void *addr, size_t len, int prot, int flags, int fildes, off_t off); fildes 가가리키는파일에서 off 로지정한오프셋부터 len 크기만큼데이터를읽어 addr 이가리키는메모리공간에매핑 prot : 보호모드 PROT_READ : 매핑된파일을읽기만함 PROT_WRITE : 매핑된파일에쓰기허용 PROT_EXEC : 매핑된파일을실행가능 PROT_NONE : 매핑된파일에접근불가 prot 에 PROT_WRITE 를지정하려면 flags 에 MAP_PRIVATE 를지정하고, 파일을쓰기가능상태로열어야함 flags : 매핑된데이터를처리하기위한정보저장 MAP_SHARED : 다른사용자와데이터의변경내용공유 MAP_PRIVATE : 데이터의변경내용공유안함 MAP_FIXED : 매핑할주소를정확히지정 ( 권장안함 ) MAP_NORESERVE : 매핑된데이터를복사해놓기위한스왑영역할당안함 MAP_ANON : 익명의메모리영역주소를리턴 MAP_ALIGN : 메모리정렬지정 MAP_TEXT : 매핑된메모리영역을명령을실행하는영역으로사용 MAP_INITDATA : 초기데이터영역으로사용 5/20 [ 예제 8-1] mmap 함수사용하기 (1) 27 ( 다음쪽 ) 명령행인자로매핑할파일명입력 ex8_1.c 6/20 [ 예제 8-1] mmap 함수사용하기 (2) ex8_1.c 해제함수 파일내용을메모리에매핑 매핑한파일내용출력 38 return 0; 39 } # ex8_1.out Usage : ex8_1.out filename # ex8_1.out mmap.dat 7/20 해제 : munmap(2) int munmap(void *addr, size_t len); addr 이가리키는영역에 len 크기만큼할당해매핑한메모리해제 해제한메모리에접근하면 SIGSEGV 또는 SIGBUS 시그널발생 [ 예제 8-2] munmap 함수사용하기 ex8_2.c 8/20

[ 예제 8-2] munmap 함수사용하기 (2) ex8_2.c 의보호모드변경 27 38 if (munmap(addr, statbuf.st_size) == 1) { 39 perror("munmap"); 40 exit(1); 41 } 42 43 printf("%s", addr); 44 45 return 0; 46 } 매핑이해제된메모리에접근 # ex8_2.out mmap.dat 파일내용을메모리에매핑 해제 세그멘테이션결함 (Segmentation Fault)( 코어덤프 ) 9/20 보호모드변경 : mprotect(2) int mprotect(void *addr, size_t len, int prot); mmap 함수로을수행할때초깃값을설정한보호모드를 mprotect 함수로변경가능 prot 에지정한보호모드로변경 10/20 파일의크기확장함수 파일의크기와 존재하지않거나크기가 0인파일은할수없음 빈파일생성시파일의크기를확장한후을해야함 경로명을사용한파일크기확장 : truncate(3) #include <unistd.h> int truncate(const char *path, off_t length); path 에지정한파일의크기를 length 로지정한크기로변경 파일기술자를사용한파일크기확장 : ftruncate(3) #include <unistd.h> int ftruncate(int fildes, off_t length); 일반파일과공유메모리에만사용가능 이함수로디렉토리에접근하거나쓰기권한이없는파일에접근하면오류발생 [ 예제 8-3] ftruncate 함수사용하기 (1) ex8_3.c 09 int main(void) { 10 int fd, pagesize, length; 11 caddr_t addr; 13 pagesize = sysconf(_sc_pagesize); 메모리의페이지크기정보검색 14 length = 1 * pagesize; 15 16 if ((fd = open("m.dat", O_RDWR O_CREAT O_TRUNC, 0666)) == 1) { perror("open"); 18 exit(1); 19 } 20 21 if (ftruncate(fd, (off_t) length) == 1) { perror("ftruncate"); 23 exit(1); 빈파일의크기증가 24 } 25 11/20 /20

[ 예제 8-3] ftruncate 함수사용하기 (2) ex8_3.c 매핑된메모리동기화 26 addr = mmap(null, length, PROT_READ PROT_WRITE, MAP_SHARED, fd, (off_t)0); 27 if (addr == MAP_FAILED) { 28 perror("mmap"); 29 exit(1); 30 } 31 32 close(fd); 33 34 strcpy(addr, "Ftruncate Test\n"); 매핑한메모리에데이터쓰기 36 return 0; } # ls m.dat m.dat: 해당파일이나디렉토리가없음 # ex8_3.out # cat m.dat ftruncate Test 매핑된메모리동기화 매핑된메모리의내용과백업내용이일치하도록동기화필요 매핑된메모리동기화 : msync(3) int msync(void *addr, size_t len, int flags); addr 로시작하는메모리영역에서 len 길이만큼의내용을백업저장장치에기록 flags : 함수의동작지시 MS_ASYNC : 비동기쓰기작업 MS_SYNC : 쓰기작업을완료할때까지 msync 함수는리턴안함 MS_INVALIDATE : 메모리에복사되어있는내용을무효화 13/20 14/20 [ 예제 8-4] msync 함수사용하기 (1) ex8_4.c [ 예제 8-4] msync 함수사용하기 (2) ex8_4.c 파일의상세정보검색 매핑된내용출력 38 printf(" \n"); 39 addr[0] = 'D'; 40 printf("%s", addr); 매핑된내용수정 41 42 msync(addr, statbuf.st_size, MS_SYNC); 43 44 return 0; 45 } 수정된내용동기화 # ex8_4.out mmap.dat DANBIT DANBIT 15/20 16/20

[ 예제 8-5] 데이터교환하기 (1) [ 예제 8-5] 데이터교환하기 (2) 을이용한데이터교환 부모프로세스와자식프로세스가을사용하여데이터교환가능 09 int main(int argc, char *argv[]) { 10 int fd; 11 pid_t pid; caddr_t addr; 13 struct stat statbuf; 14 15 if (argc!= 2) { 16 fprintf(stderr, "Usage : %s filename\n", argv[0]); exit(1); 18 } 19 20 if (stat(argv[1], &statbuf) == 1) { 21 perror("stat"); exit(1); 23 } 24 25 if ((fd = open(argv[1], O_RDWR)) == 1) { 26 perror("open"); 27 exit(1); 28 } 29 30 addr = mmap(null, statbuf.st_size, PROT_READ PROT_WRITE, 31 MAP_SHARED, fd, (off_t)0); 32 if (addr == MAP_FAILED) { 33 perror("mmap"); 34 exit(1); } 36 close(fd); 38 switch (pid = fork()) { 39 case 1 : /* fork failed */ fork 함수로자식프로세스생성 40 perror("fork"); 41 exit(1); 42 break; /20 18/20 [ 예제 8-5] 데이터교환하기 (3) 43 case 0 : /* child process */ 44 printf("1. Child Process : addr=%s", addr); 45 sleep(1); 46 addr[0] = 'x'; 자식프로세스가매핑된내용수정 47 printf("2. Child Process : addr=%s", addr); 48 sleep(2); 49 printf("3. Child Process : addr=%s", addr); 50 break; 51 default : /* parent process */ 52 printf("1. Parent process : addr=%s", addr); 53 sleep(2); 54 printf("2. Parent process : addr=%s", addr); 55 addr[1] = 'y'; 56 printf("3. Parent process : addr=%s", addr); 57 break; 58 } 59 60 return 0; 61 } 부모프로세스가매핑된내용수정 # ex8_5.out mmap.dat 1. Child Process : addr= 1. Parent process : addr= 2. Child Process : addr=xanbit 2. Parent process : addr=xanbit 3. Parent process : addr=xynbit 3. Child Process : addr=xynbit xynbit # 19/20 IT CookBook, 유닉스시스템프로그래밍