<C1A63130C0E5C7C1B7CEBCBCBDBA2E687770>

Size: px
Start display at page:

Download "<C1A63130C0E5C7C1B7CEBCBCBDBA2E687770>"

Transcription

1 제 10 장프로세스프로그래밍 프로세스시작 / 종료 자식프로세스생성 프로세스내에서새로운프로그램실행 시그널 시스템부팅 10.1 프로그램시작및종료 Unix 에서프로그램은어떻게실행이시작되고종료될까? 프로그램은 10.3 절에서살펴볼 exec 시스템호출에의해실행된다. 이호출은실행될프로그램의시작루틴에게명령줄인수 (command-line arguments) 와환경변수 (environment variables) 를전달한다. C 프로그램을컴파일하면실행파일에는 C 프로그램의코드와더불어 C 시작루틴 (start-up routine) 이포함된다. 이시작루틴은 exec 시스템호출로부터전달받은명령줄인수, 환경변수를다음과같이 main 함수를호출하면서 main 함수에다시전달한다. main 함수에서부터프로그램이실행되고실행이끝나면반환값을받아 exit 한다. exit( main( argc, argv) ); exec 시스템호출에서부터 C 시작루틴, main 함수로프로그램실행이시작되는과정은그림 10.1과같다. 그림 10.1 프로그램실행의시작 exec() 시스템호출은실행되는프로그램에게명령줄인수를전달하는데실행되는프로그램의 main 함수는 argc와 argv 매개변수를통해서명령줄인수의수와명령줄인수에대

2 한포인터배열을전달받는다. int main(int argc, char *argv[]); argc : 명령줄인수의수 argv[] : 명령줄인수리스트를나타내는포인터배열 명령줄인수리스트를나타내는포인터배열 argv 의구성은그림 10.2 와같다. 그림 10.2 명령중인수리스트 argv 구성 또한전역변수 environ을통해환경변수리스트도전달받는데그구성은그림 10.3과같다. 그림 10.3 환경변수리스트 environ 의구성 프로그램 10.1은모든명령줄인수와환경변수를프린트한다. 포인터변수 ptr을이용하여환경변수리스트의시작위치인 environ에서부터시작하여 1씩증가하면서각환경변수를프린트한다.

3 프로그램 10.1 printall.c #include <stdio.h> int main(int argc, char *argv[]) { int i char **ptr extern char **environ; for (i = 0; i < argc i++) /* 모든명령줄인수프린트 */ printf("argv[%d]: %s \n", i, argv[i]); for (ptr = environ *ptr!= 0; ptr++) /* 모든환경변수값프린트 */ printf("%s \n", *ptr); exit(0); 이제프로그램이종료하는방법에대해서알아보자. 프로그램의실행을종료하는방법은정상종료 (normal termination), 비정상종료 (abnormal termination) 로크게두가지로나눌수있다. 먼저프로그램이정상적으로종료하는방법부터알아보도록하자. main() 실행을마치고리턴하면 C 시작루틴은이리턴값을가지고 exit() 을호출한다. 프로그램내에서직접 exit() 을호출할수있다. 프로그램내에서직접 _exit() 을호출할수있다. #include <stdlib.h> void exit(int status); exit() 시스템호출은뒷정리 (cleanup processing) 를한후프로세스를정상적으로종료시킨다. exit() 시스템호출은프로세스를정상적으로종료시키는데종료전에모든열려진스트림을닫고 (fclose), 출력버퍼의내용을디스크에쓰는 (fflush) 등의뒷정리 (cleanup processing) 를한다. 프로세스의종료상태를알리는종료코드 (exit code) 를부모프로세스에게전달한다.

4 #include <stdlib.h> void _exit(int status); exit() 시스템호출은뒷정리 (cleanup processing) 를하지않고프로세스를즉시종료시킨다. _exit() 시스템호출역시프로세스를정상적으로종료시키는데뒷정리를하지않고즉시종료된다는점이 exit() 시스템호출과다르다. 프로그램이비정상적으로종료하는방법은 2 가지가있다. abort() 시스템호출은프로세스에 SIGABRT 시그널을보내어프로세스를비정상적으로종료시킨다. 시그널에의한종료 : 프로세스가실행중에시그널을받으면갑자기비정상적으로종료하게된다. 시그널에대한자세한사항은 10.6 절에서자세히다룬다 프로세스구조 프로세스란무엇인가? 프로세스에대한정의혹은설명은여러가지가있지만가장쉬운정의는실행중인프로그램 (executing program) 을프로세스라고생각하는것이다. 다시말하면프로그램이실행되면프로세스가되는것이다. 한프로그램은여러번실행될수있으므로한프로그램으로부터여러개의프로세스를만들수있으며프로그램그자체가프로세스는아니라는점을주의하자. 프로그램을실행즉프로세스를유지하기위해서는무엇이필요할지생각해보자. 먼저프로세스관리를위한커널내의프로세스에대한정보가필요할것이다. 또한프로세스즉프로그램실행을위해서는그림 10.4와같이실행코드, 데이터, 힙, 스택등을메모리내에배치해야한다. 이러한메모리배치를프로세스메모리이미지라고한다. 프로세스메모리이미지를구성하는프로그램의실행코드, 데이터, 스택, 힙등의영역의역할은다음과같다. 코드 (code) 프로세스의실행코드를저장하는영역이다. 데이터 (data) 전역변수 (global variable) 및정적변수 (static variable) 를위한영역이다.

5 그림 10.4 프로세스메모리이미지 힙 (heap) 동적메모리할당을위한영역이다. 스택 (stack area) 함수호출을구현하기위한 ( 지역변수를포함하는 ) 활성레코드 (activation record) 를저장하기위한실행시간스택 (runtime stack) 을위한영역이다. U-영역 (user-area) 열린파일식별자등과같은시스템관리정보를저장하는영역이다.

6 10.3 프로세스생성 각프로세스는프로세스를구별하는번호인프로세스 ID를갖고있다. 실행중인프로그램즉프로세스가 getpid() 를호출하면실행중인프로세스의 ID를리턴한다. 또한 getppid() 를호출하면실행중인프로세스의부모프로세스의 ID를리턴한다. int getpid( ) 프로세스의 ID를리턴한다. int getppid( ) 부모프로세스의 ID를리턴한다. Unix에서는필요에따라새로운프로세스를생성해야하는데 fork() 시스템호출이프로세스를생성하는유일한방법이다. #include <sys/types.h> #include <unistd.h> pid_t fork(void); fork() 시스템호출은새로운자식프로세스를생성한다. 자식프로세스에게는 0을리턴하고부모프로세스에게는자식프로세스 ID를리턴한다. fork() 시스템호출은새로운자식프로세스를생성한다. 프로세스생성원리를간단히요약하면자기복제 ( 自己複製 ) 라고할수있다. 자식프로세스는부모프로세스 ( 코드, 데이터, 스택, 힙등 ) 를똑같이복제해만들어진다. fork() 시스템호출을하면새로운자식프로세스가즉시생성되며부모프로세스와자식프로세스에게각각리턴한다. 자식프로세스에게는 0을리턴하고부모프로세스에게는자식프로세스 ID를리턴한다. fork() 시스템호출은한번호출되지만두번리턴된다는점을주의하자. fork() 호출후에부모프로세스와자식프로세스가병행적으로실행을계속한다. 다음예제프로그램을통해 fork() 호출후에리턴값과실행흐름을살펴보자. 실행결과를보면 fork() 뒤에나오는문장은부모프로세스와자식프로세스에의해각각실행되며부모프로세스에게는생성된자식프로세스의 ID(15066) 이리턴되고자식프로세스에게는 0이리턴됨을확인할수있다.

7 그림 10.5 프로세스생성전후 프로그램 10.2 fork1.c #include <stdio.h> main() { int pid; printf("[%d] 프로세스시작 \n", getpid()); pid = fork(); printf("[%d] 프로세스 : 리턴값 %d\n", getpid(), pid); 실행결과 [15065] 프로세스시작 [15065] 프로세스 : 리턴값 [15066] 프로세스 : 리턴값 0 이예제를통해 fork() 호출뒤에나타나는문장은부모프로세스와자식프로세스가병행적으로모두실행한다는것을확인할수있었다. 그러면부모프로세스와자식프로세스가서로다른일을하려면어떻게하여야할까? fork() 호출후에리턴값이다르므로이리턴값을이용하면부모프로세스와자식프로세스를구별하고서로다른일을하도록할수있을것이다. 따라서다음과같은코드를수

8 행하면 fork() 호출후에자식프로세스는자식을위한코드부분을실행하고부모프로세스는부모를위한코드부분을실행한다. pid = fork(); if ( pid == 0 ) { 자식프로세스의실행코드 else { 부모프로세스의실행코드 다음예제프로그램은부모프로세스가자식프로세스를생성하며각프로세스가메시지와프로세스 ID를프린트한다. 실행결과를보면자식프로세스는리턴값으로 0을받았으므로 if 문의 then 부분을실행했고부모프로세스는리턴값으로자식프로세스 ID(15800) 을받았으므로 if 문의 else 부분을실행했음을확인할수있다. 프로그램 10.3 fork2.c #include <stdlib.h> #include <stdio.h> main() { int pid; pid = fork(); if(pid ==0){ printf("[child] : Hello, world pid=%d\n",getpid()); else { printf("[parent] : Hello, world pid=%d\n",getpid()); 실행결과 [Parent] : Hello, world pid=15799 [Child] : Hello, world pid=15800 이제하나의부모프로세스가두개의자식프로세스를생성하는다음예제프로그램을살펴보자. 이예제에서부모프로세스는두개의자식프로세스를생성하며각자식프로세스가메시지와프로세스 ID를프린트한다. 프로그램 10.4 fork3.c #include <stdlib.h>

9 #include <stdio.h> main() { int pid1, pid2; pid1 = fork(); if (pid1 == 0) { printf("[child 1] : Hello, world! pid=%d\n",getpid()); exit(0); pid2 = fork(); if (pid2 == 0) { printf("[child 2] : Hello, world! pid=%d\n",getpid()); exit(0); 실행결과 [Child 1] : Hello, world! pid=15741 [Child 2] : Hello, world! pid=15742 QnA 첫번째자식프로세스부분에서 exit(0) 를왜하지요? int wait(int* status) wait() 시스템호출은자식프로세스중에하나가종료될때가지호출한프로세스를기다리게한다. 종료된자식프로세스의 pid를리턴하고상태코드를 *status에둔다. 이제 wait 시스템호출을이용하여부모프로세스가자식프로세스가끝나기를기다리는다음예제프로그램을살펴보자. 부모프로세스는자식프로세스가끝나기를기다리며끝난후에는자식프로세스종료메시지와자식프로세스로부터받은종료코드값을프린트한다. 프로그램 10.5 forkwait.c #include <stdio.h> main() { int pid, child, status;

10 printf("[%d] 부모프로세스시작 \n", getpid( )); pid = fork(); if (pid == 0) { printf("[%d] 자식프로세스시작 \n", getpid( )); exit(1); child = wait(&status); printf("[%d] 자식프로세스 %d 종료 \n", getpid(), child); printf("\t종료코드 %d\n", status>>8); 실행결과 [15943] 부모프로세스시작 [15944] 자식프로세스시작 [15943] 자식프로세스 종료종료코드 1

11 10.4 프로그램실행 앞에서살펴본것처럼부모프로세스가자식프로세스를생성하면자식프로세스는부모프로세스와같은코드를실행한다. 그렇다면자식프로세스에게새로운일을시키려면어떻게하여야할까? 이를위해서는자식프로세스내에서새로운프로그램을실행시킬수있는방법이있어야한다. exec() 시스템호출을이용하여프로세스내에서새로운프로그램을실행시킬수있으며 exec() 시스템호출이프로세스내에서새로운프로그램을실행시키는유일한방법이다. exec() 시스템호출의원리를간단히요약하면자기대치 ( 自己代置 ) 라고할수있다. 프로세스가 exec() 호출을하면, 그프로세스내의프로그램은완전히새로운프로그램 ( 코드, 데이터, 스택등 ) 으로대치된다. 그리고새프로그램의 main() 부터실행이시작한다. 그림 10.6 프로그램실행 exec() 호출이성공하면그프로세스내에기존의프로그램은없어지고새로운프로그램으로대치되므로 exec() 호출은리턴할곳이없어진다. 성공한 exec() 호출은절대리턴하지않는다는점을유의하자. exec() 호출은실패할경우에만리턴한다. int execl(char* path, char* arg0, char* arg1,..., char* argn, NULL) int execv(char* path, char* argv[ ]) 호출한프로세스의코드, 데이터, 힙, 스택등을 path가나타내는새로운프로그램으로대치한후새프로그램을실행한다. 성공한 exec( ) 호출은리턴하지않으며실패하면 -1을리턴한다. exec 시스템호출에는크게 execl() 과 execv() 이있다. execl() 시스템호출은명령줄인수를하나씩나열하고 NULL은인수끝을나타낸다. execv() 시스템호출을할때는

12 명령줄인수를하나씩나열하지않고명령줄인수리스트를포인터배열로만들어이배열의이름을전달한다. 보통다음과같이 fork() 시스템호출후에 exec() 시스템호출하는경우가일반적이며새로실행할프로그램에대한정보를 arguments로전달한다. exec() 시스템호출이성공하면자식프로세스는새로운프로그램을실행하게되고부모는계속해서다음코드를실행하게된다. exec() 시스템호출이실패하면자식프로세스는 exit(1) 를호출하여종료한다. if ((pid = fork()) == 0 ){ exec( arguments ); exit(1); // 부모계속실행 간단한예제프로그램을살펴보자. 이프로그램은자식프로세스를생성하여자식프로세스로하여금 echo 명령어를실행하게한다. 여기서는 execl() 시스템호출을사용하였으며명령줄인수로 "hello" 스트링을주고 NULL은인수끝을나타낸다. execl("/bin/echo", "echo", "hello", NULL); 자식프로세스는 echo 명령어를실행하여명령줄인수로받은 "hello" 스트링을그대로프린트한다. 프로그램 10.6 execute1.c #include <stdio.h> main( ) { printf(" 부모프로세스시작 \n"); if (fork( ) == 0) { execl("/bin/echo", "echo", "hello", NULL); fprintf(stderr," 첫번째실패 "); exit(1); printf(" 부모프로세스끝 \n"); 실행결과부모프로세스시작 hello 부모프로세스끝

13 이예제프로그램은세개의자식프로세스를생성하여각각에게서로다른명령어를실행시킨다. 프로그램 10.7 execute2.c #include <stdio.h> main( ) { printf(" 부모프로세스시작 \n"); if (fork( ) == 0) { execl("/bin/echo", "echo", "hello", NULL); fprintf(stderr," 첫번째실패 "); exit(1); if (fork( ) == 0) { execl("/bin/date", "date", NULL); fprintf(stderr," 두번째실패 "); exit(2); if (fork( ) == 0) { execl("/bin/ls","ls", "-l", NULL); fprintf(stderr," 세번째실패 "); exit(3); printf(" 부모프로세스끝 \n"); 실행결과 위프로그램은정해진명령어만실행시킨다. 이제명령줄인수로받은임의의명령어를실행시키는프로그램을작성해보자. 다음예제프로그램은명령줄인수로받은명령어의실행을위해자식프로세스를생성하고자식프로세스로하여금그명령어를실행하게한다. 부모프로세스는자식프로세스가끝날때까지기다리며자식프로세스가종료하면자식프로세스종료메시지와자식프로세스로부터받은종료코드를프린트한다. 이프로그램의실행과정을다음그림과같이표현할수있다. wait() fork() exec() exit()

14 프로그램 10 execute3.c #include <stdio.h> int main(int argc, char *argv[]) { int child, pid, status; pid = fork( ); if (pid == 0) { execvp(argv[1], &argv[1]); fprintf(stderr, "%s: 실행불가 \n",argv[1]); else { child = wait(&status); printf("[%d] 자식프로세스 %d 종료 \n", getpid(), pid); printf("\t종료코드 %d \n", status>>8); 이프로그램을이용하여명령줄인수로받은임의의명령어를실행시킬수있다. 예를들어다음명령은 ls 명령어를실행시킨다. $ execute ls -l /tmp 기타시스템호출 - 현재디렉토리변경 각프로세스는현재작업디렉토리 (current working directory) 를가지고있다. chdir() 시스템호출은현재작업디렉토리를매개변수가지정한경로 pathnamedm로변경한다. 이시스템호출이성공하려면프로세스는그디렉토리에대한실행권한이있어야한다. 성공하면 0 실패하면 -1를리턴한다. int chdir (char* pathname) 현재작업디렉토리를 pathname 으로변경한다. - 프로세스의사용자 ID 와그룹 ID 각프로세스마다사용자 ID가있는데프로세스의사용자 ID는로그인하여그프로세스를실행시킨사용자를나타낸다. 다음시스템호출은프로세스의소유주의사용자 ID와그룹

15 ID 를각각리턴한다. int getuid() 프로세스의사용자 ID를리턴한다. int getgid() 프로세스의그룹 ID를리턴한다. 또한다음시스템호출은프로세스의소유주를매개변수로지정해준사용자 ID와그룹 ID로각각변경한다. int setuid(uid_t uid) 프로세스의사용자 ID를 uid로변경한다. int setgid(gid_t gid) 프로세스의그룹 ID를 gid로변경한다.

16 10.5 시스템부팅 시스템부팅과정을생각해보자. 시스템이부팅되면서여러개의프로세스가생성되는데이과정은어떻게이루어질까? 시스템부팅과정에서앞에서배운 fork/exec는매우유용하게사용된다. 부팅이시작되면커널내부에서프로세스 ID가 0인첫번째프로세스 swapper가만들어진다. swapper는프로세스를스케쥴링하는기능을한다. 이프로세스는 fork/exec를수행하여 1번프로세스인 init 프로세스를생성한다. init 프로세스는역시 fork/exec를반복적으로수행하여시스템운영에필요한다양한프로세스들 ( 주로서버데몬프로세스 ) 을새로생성한다. 이 init 프로세스는모든프로세스의조상이라고할수있다. 그림 10.7은이러한부팅과정을보여주고있는데예를들어 sshd와같은 ssh 데몬프로세스나 getty 프로세스를생성한다. 이그림에서괄호안의수는프로세스 ID를나타낸다. 데몬프로세스중에는 getty(linux 경우에는 mingetty) 프로세스가있는데이프로세스로부터로그인과정이시작된다. 이프로세스는화면에로그인프롬프트를띄우고사용자의 ID가입력되기를기다린다. 입력이들어오면 fork() 시스템호출은하지않고바로 exec() 시스템호출을하여 login 프로그램 (/bin/login) 을실행한다. 이프로그램이패스워드등을검사하고성공하면다시 exec() 시스템호출을하여 shell 프로그램 ( 예를들어 /bin/sh) 을실행한다. 그림 10.7은이러한로그인과정을보여주고있는데 getty 프로세스가 login 프로세스, shell 프로세스로변화하지만 fork() 시스템호출은하지않고 exec() 시스템호출만하기때문에프로세스 ID는모두같다는점을유의하자. 그림 10.7 부팅및로그인과정 각프로세스에대한보다자세한설명은다음과같다. swapper ( 스케줄러프로세스 )

17 swapper는커널내부에서만들어진프로세스로프로세스스케줄링을한다. 이프로세스는커널내의코드를실행하기때문에별도의실행파일이존재하지않는다. init ( 초기화프로세스 ) init 프로세스 (/etc/init 혹은 /sbin/init ) 는 /etc/inittab 파일에기술된대로시스템을초기화하는데이파일내에서다시 /etc/rc* 즉 rc로시작되는이름의쉘스크립트들을실행한다. 이러한과정을통해서파일시스템마운트, 서버데몬프로세스생성, getty 프로세스생성등의작업을수행하여시스템을초기화한다. getty 프로세스 getty 프로세스 (/etc/getty 혹은 /etc/mingetty) 는로그인프롬프트를내고키보드입력을감지한다. 아이디, 패스워드를입력하면로그인절차를진행하기위해로그인프로그램 (/bin/login) 을실행한다. login 프로세스 login 프로세스는 /etc/passwd 파일을참조하여사용자의로그인아이디및패스워드를검사한다. 로그인절차가성공하면쉘프로그램 (/bin/sh, /bin/csh 등 ) 을실행한다. shell 프로세스 shell 프로세스는시작파일을실행한후에쉘프롬프트를내고사용자로부터명령어를기다린다. 명령어가입력되면해석하여명령어를실행시킨다. 명령어실행후에다시쉘프롬프트를내고이과정을반복한다.

18 10.6 시그널 (Signal) 프로그램실행도중에예기치않는사건이발생하면이를실행중인프로그램에알려줄수있어야한다. 예를들어연산중에 0으로나누는오류가발생하면재빨리이를프로그램에알려야하고프로그램에서는이를적절히처리해야한다. 이러한의미에서시그널은예기치않은사건이일어날때발생하는소프트웨어인터럽트라고할수있다. 예를들어다음과같은경우에시그널이발생한다. 부동소숫점오류 정전 알람시계울림 자식프로세스종료 키보드로부터종료요청 (Ctrl-C) 키보드로부터정지요청 (Ctrl-Z) Unix에는총 31개의시그널이 /usr/include/signal.h에정의되어있다. 각시그널이름은 SIG로시작된다. 시그널이름 의미 SIGABRT SIGALRM SIGINT SIGSTP SIGFPE SIGSEGV SIGPIPE SIGCHLD SIGCONT SIGHUP SIGILL SIGIO SIGKILL SIGPIPE SIGSTOP SIGSYS SIGTERM abort() 에서발생되는종료시그널알람시계 alarm() 울림터미널에서 CTRL-C 할때발생하는인터럽트시그널터미널에서 CTRL-C 할때발생하는중지시그널 0으로나누기유효하지않은메모리참조끊어진파이프프로세스의종료혹은중지를부모에게알리는시그널중지된프로세스를계속시키는시그널연결끊김잘못된하드웨어명령어수행비동기화 I/O 이벤트알림프로세스종료시키는시그널파이프에쓰려고할때리더가없을때프로세스중지시그널유효하지않은시스템호출 kill() 에서보내는종료시그널

19 alarm() 시스템호출은매개변수로받은초후에 SIGALRM 시그널을발생시킨다. 프로그램이실행중에이시그널을받으면 Alarm clock" 메시지를출력하고프로그램은종료된다. 다음예제프로그램을살펴보자. 이프로그램에서는 5초후에 SIGALRM 시그널이발생된다. while 루프는 1초에한번씩 1초경과 라는메시지를출력하다가 5초가지나면해당시그널을받아 Alarm clock" 메시지를출력하고프로그램은종료된다. 마지막 printf 문은무한루프뒤에위치해있으며무한루프실행중에 SIGALRM 시그널을받으면프로그램이종료되므로절대로실행되지않음을주의하자. 프로그램 10.9 alarm.c #include <stdio.h> main( ) { alarm(5) printf(" 무한루프 \n"); while (1) { sleep(1); printf( 1초경과 \n"); printf(" 실행되지않음 \n"); 시그널처리 앞의예에서본것처럼발생한시그널을따로처리하지않으면시그널에따라다르지만많은경우에프로그램은거기서종료된다. 따라서시그널이발생하면이를잡아서적절히처리할수있어야한다. 이를위해서다음과같은의미로시그널에대한처리함수를지정할수있다. 이시그널이발생하면이렇게처리하라 시그널에대한처리함수지정은 signal() 시스템호출을통해할수있는데 signal() 시스템호출은다음과같은형태로각시그널에대한처리함수를등록한다. signal(int sigcode, void (*func)( ))) sigcode 에대한처리함수를 func 으로지정한다. func 은 SIG_IGN, SIG_DFL 혹

20 은사용자정의함수이름이다. 기존의처리함수를리턴한다. 세종류의처리함수의의미는다음과같다. SIG_IGN 발생된시그널을무시하겠다는의미로 SIGKILL, SIGSTOP을제외한시그널은필요하면무시할수있다. SIG_DFL 시그널에대한처리함수로디폴트처리함수를사용하겠다는의미이다. 각시그널마다미리정해진디폴트처리함수가있으며따로지정하지않으면이처리함수가수행된다. 사용자정의함수시그널에대한처리함수로지정한사용자정의함수를사용하겠다는의미이다. 이제시그널처리함수를이용한예제프로그램을살펴보자. 다음예제프로그램은명령줄인수로받은임의의명령어를제한시간내에실행시키는프로그램이다. 이프로그램은프로그램 10.xx를알람시그널을이용하여확장하여작성하였다. 명령어실행에제한시간을두기위해서는자식프로세스가명령어를실행하는동안정해진시간이초과되면 SIGALRM 시그널이발생하고이때자식프로세스를강제종료하면된다. 이를위해서두가지작업을수행한다. 먼저제한시간을입력받아알람시계를동작시킨다. 두번째로 SIGALRM 시그널에대한처리함수 alarmhandler() 를작성하고이를 SIGALRM 시그널에대한처리함수로지정한다. 이처리함수는 SIGALRM 시그널이발생되면자동적으로실행되어자식프로세스를강제적으로종료시킨다. 이예제에서는 kill(pid,sigint) 시스템호출을통해자식프로세스에 SIGINT 시그널을보내어강제적으로종료시켰다. 프로그램 limit.c #include <stdio.h> #include <signal.h> int pid; void alarmhandler(); main(int argc, char *argv[]) { int child, status, limit; signal(sigalrm,alarmhandler); sscanf(argv[1], "%d", &limit); alarm(limit);

21 pid = fork( ); if (pid == 0) { execvp(argv[2], &argv[2]); fprintf(stderr, "%s: 실행불가 \n",argv[1]); else { child = wait(&status); printf("[%d] 자식프로세스 %d 종료 \n", getpid(), pid); printf("\t종료코드 %d \n", status>>8); void alarmhandler() { printf("[ 알람 ] 자식프로세스 %d 시간초과 \n", pid); kill(pid,sigint); 프로세스에 Signal 보내기 상황에따라시그널이자동적으로발생되기도하지만앞에예에서도본것처럼필요에따라특정프로세스에임의의시그널을강제적으로보낼필요가있다. 이러한기능은한프로세스가다른프로세스를제어하는데매우유용하게사용될수있다. 다음의 kill() 시스템호출을이용하여특정프로세스에원하는임의의시그널을보낼수있다. int kill(int pid, int sigcode) 프로세스 pid에시그널 sigcode를보낸다. 성공조건 : 보내는프로세스의소유자가프로세스 pid의소유자와같거나혹은보내는프로세스의소유자가슈퍼유저이어야한다. 시그널을이용하여자식프로세스를제어하는예제프로그램을살펴보자. 프로그램 은자식프로세스를생성하고실행중인자식프로세스에 SIGSTOP 시그널을보내어정지시키고다시 SIGCONT 시그널을보내어실행을계속하게한다. 그후 SIGINT 시그널을보내어자식프로세스를강제종료시킨다. 프로그램 control.c #include <signal.h> #include <stdio.h>

22 main( ) { int pid1, pid2; pid1 = fork( ); if (pid1 == 0) { while(1) { printf(" 프로세스 %id 실행 \n", getpid()); sleep(1); sleep(3); kill(pid1, SIGSTOP); sleep(3); kill(pid1, SIGCONT); sleep(3); kill(pid1, SIGINT);

chap12(process).hwp

chap12(process).hwp 제 12 장프로세스 프로세스는파일과더불어유닉스운영체제가제공하는핵심개념중의하나이다. 유닉스시스템을깊이있게이해하기위해서는프로세스에대해정확히이해해야한다. 이장에서는프로그램이시작되는과정, 프로세스의구조, 프로세스생성및프로그램실행메커니즘, 프로세스사이의시그널등에대해서자세히살펴본다. 12.1 프로그램시작및종료 유닉스에서프로그램은어떻게실행이시작되고종료될까? 프로그램은 12.3절에서살펴볼

More information

제9장 프로세스 제어

제9장 프로세스 제어 제 9 장프로세스제어 리눅스시스템프로그래밍 청주대학교전자공학과 한철수 제 9 장 목차 프로세스생성 프로그램실행 입출력재지정 프로세스그룹 시스템부팅 2 9.1 절 프로세스생성 fork() 시스템호출 새로운프로그램을실행하기위해서는먼저새로운프로세스를생성해야하는데, fork() 시스템호출이새로운프로세스를생성하는유일한방법임. 함수프로토타입 pid_t fork(void);

More information

제1장 Unix란 무엇인가?

제1장  Unix란 무엇인가? 1 시그널 2 11.1 시그널 시그널 시그널은예기치않은사건이발생할때이를알리는소프트웨어인터럽트이다. 시그널발생예 SIGFPE 부동소수점오류 SIGPWR 정전 SIGALRM 알람시계울림 SIGCHLD 자식프로세스종료 SIGINT 키보드로부터종료요청 (Ctrl-C) SIGSTP 키보드로부터정지요청 (Ctrl-Z) 3 주요시그널 시그널이름 의미 기본처리 SIGABRT

More information

ABC 11장

ABC 11장 12 장고급응용 0 수행중인프로그램 프로세스 모든프로세스는유일한프로세스식별번호 (PID) 를가짐 유닉스에서는 ps 명령을사용하여프로세스목록을볼수있음 12-1 프로세스 $ ps -aux USER PID %CPU %MEM SZ RSS TT STAT START TIME COMMAND blufox 17725 34.0 1.6 146 105 i2 R 15:13 0:00

More information

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

1장.  유닉스 시스템 프로그래밍 개요 Unix 프로그래밍및실습 7 장. 시그널 - 과제보충 응용과제 1 부모프로세스는반복해서메뉴를출력하고사용자로부터주문을받아자식프로세스에게주문내용을알린다. (SIGUSR1) ( 일단주문을받으면음식이완료되기전까지 SIGUSR1 을제외한다른시그널은모두무시 ) timer 자식프로세스는주문을받으면조리를시작한다. ( 일단조리를시작하면음식이완성되기전까지 SIGALARM 을제외한다른시그널은모두무시

More information

제8장 프로세스

제8장 프로세스 제 8 장프로세스 리눅스시스템프로그래밍 청주대학교전자공학과 한철수 제 8 장 목차 쉘과프로세스 프로그램실행 프로그램종료 프로세스 ID 프로세스이미지 2 8.1 절 프로세스 프로세스 (process) 는파일과더불어리눅스운영체제의핵심개념중하나임. 리눅스시스템을깊이있게이해하기위해서는프로세스에대하여정확히이해해야함. 프로세스는실행중인프로그램이라고간단히말할수있음. 프로그램이실행되면프로세스가됨.

More information

제8장 프로세스

제8장 프로세스 제 8 장프로세스 리눅스시스템프로그래밍 청주대학교전자공학과 한철수 1 목차 쉘과프로세스 프로그램실행 프로그램종료 프로세스 ID 프로세스이미지 2 8.1 절 프로세스 프로세스 (process) 는파일과더불어리눅스운영체제의핵심개념중하나임. 리눅스시스템을깊이있게이해하기위해서는프로세스에대해서정확히이해해야함. 프로세스는간단히실행중인프로그램이라고할수있음. 프로그램이실행되면프로세스가됨.

More information

좀비프로세스 2

좀비프로세스 2 Signal & Inter-Process Communication Department of Computer Engineering Kyung Hee University. Choong Seon Hong 1 좀비프로세스 2 좀비프로세스 (zombie process) 좀비프로세스란프로세스종료후메모리상에서사라지지않는프로세스 좀비프로세스의생성이유. 자식프로세스는부모프로세스에게실행결과에대한값을반환해야한다.

More information

<4D F736F F F696E74202D FC7C1B7CEBCBCBDBA20BBFDBCBAB0FA20BDC7C7E0205BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D FC7C1B7CEBCBCBDBA20BBFDBCBAB0FA20BDC7C7E0205BC8A3C8AF20B8F0B5E55D> 학습목표 프로세스를생성하는방법을이해한다. 프로세스를종료하는방법을이해한다. exec함수군으로새로운프로그램을실행하는방법을이해한다. 프로세스를동기화하는방법을이해한다. 프로세스생성과실행 IT CookBook, 유닉스시스템프로그래밍 2/24 목차 프로세스생성 프로세스종료함수 exec 함수군활용 exec 함수군과 fork 함수 프로세스동기화 프로세스생성 [1] 프로그램실행

More information

2009년 상반기 사업계획

2009년 상반기 사업계획 프로세스생성과실행 IT CookBook, 유닉스시스템프로그래밍 학습목표 프로세스를생성하는방법을이해한다. 프로세스를종료하는방법을이해한다. exec함수군으로새로운프로그램을실행하는방법을이해한다. 프로세스를동기화하는방법을이해한다. 2/24 목차 프로세스생성 프로세스종료함수 exec 함수군활용 exec 함수군과 fork 함수 프로세스동기화 3/24 프로세스생성 [1]

More information

제1장 Unix란 무엇인가?

제1장  Unix란 무엇인가? 1 12 장파이프 2 12.1 파이프 파이프원리 $ who sort 파이프 3 물을보내는수도파이프와비슷 한프로세스는쓰기용파일디스크립터를이용하여파이프에데이터를보내고 ( 쓰고 ) 다른프로세스는읽기용파일디스크립터를이용하여그파이프에서데이터를받는다 ( 읽는다 ). 한방향 (one way) 통신 파이프생성 파이프는두개의파일디스크립터를갖는다. 하나는쓰기용이고다른하나는읽기용이다.

More information

10.

10. 10. 10.1 10.2 Library Routine: void perror (char* str) perror( ) str Error 0 10.3 10.3 int fd; /* */ fd = open (filename, ) /*, */ if (fd = = -1) { /* */ } fcnt1 (fd, ); /* */ read (fd, ); /* */ write

More information

Microsoft PowerPoint - Lecture_Note_7.ppt [Compatibility Mode]

Microsoft PowerPoint - Lecture_Note_7.ppt [Compatibility Mode] Unix Process Department of Computer Engineering Kyung Hee University. Choong Seon Hong 1 유닉스기반다중서버구현방법 클라이언트들이동시에접속할수있는서버 서비스를동시에처리할수있는서버프로세스생성을통한멀티태스킹 (Multitasking) 서버의구현 select 함수에의한멀티플렉싱 (Multiplexing)

More information

Microsoft PowerPoint - 10_Process

Microsoft PowerPoint - 10_Process Linux 프로세스프로그래밍 Programming - 프로세스생성 : fork, exec - 프로세스동기화 : wait - 프로세스관리함수 프로세스관련함수 프로세스생성과종료 함수 의미 fork 자신과완전히동일한프로세스를생성한다. exec 계열지정한실행파일로부터프로세스를생성한다. exit 종료에따른상태값을부모프로세스에게전달하며프로세스를종료한다. atexit exit

More information

Microsoft PowerPoint - 10_Signal

Microsoft PowerPoint - 10_Signal Operating System Laboratory 시그널 - IPC - 시그널의종류 - 시그널구현함수 IPC 프로세스간통신 (Inter-Process Communication) 실행중인프로세스간에데이터를주고받는기법 IPC 에는매우많은방법이있다! File Pipe/Named pipe Socket Shared memory Message passing Remote

More information

6주차.key

6주차.key 6, Process concept A program in execution Program code PCB (process control block) Program counter, registers, etc. Stack Heap Data section => global variable Process in memory Process state New Running

More information

슬라이드 1

슬라이드 1 -Part3- 제 4 장동적메모리할당과가변인 자 학습목차 4.1 동적메모리할당 4.1 동적메모리할당 4.1 동적메모리할당 배울내용 1 프로세스의메모리공간 2 동적메모리할당의필요성 4.1 동적메모리할당 (1/6) 프로세스의메모리구조 코드영역 : 프로그램실행코드, 함수들이저장되는영역 스택영역 : 매개변수, 지역변수, 중괄호 ( 블록 ) 내부에정의된변수들이저장되는영역

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 UNIX 및실습 8 장. 프로세스와사용자 명령익히기 1 학습목표 유닉스에서프로세스가무엇인지그개념을이해한다. 프로세스와관련된유닉스명령의사용방법을익힌다. 포그라운드처리와백그라운드처리의차이를이해한다. 사용자정보를보는명령의사용방법을익힌다. 2 01. 프로세스의개념과종류 프로세스 (process) 현재시스템에서실행중인프로그램 프로세스는고유번호를가진다. Process

More information

System Programming Lab

System Programming Lab System Programming Lab Week 4: Shell Schedule for your own shell 1 st shell 기본기능 fork / exec Background Processing/ Sequential Execution ls, find, grep 2 nd Environment variables/ Shell variables built-in

More information

리눅스 프로세스 관리

리눅스 프로세스 관리 프로세스 (Process) Process 프로그램이나명령어를실행하면메모리에적재되어실제로실행되고있는상태를의미 이러한프로세스들은프로세스가시작하면서할당받는프로세스식별번호인 PID(Process ID), 해당프로세스를실행한부모프로세스를나타내는 PPID(Parent Process ID), UID 와 GID 정보를통해해당프로세스가어느사용자에속해있는지, 프로세스가파일에대해갖는권한및프로세스가실행된터미널,

More information

Microsoft PowerPoint - chap9 [호환 모드]

Microsoft PowerPoint - chap9 [호환 모드] 제 9 장프로세스관계 숙대창병모 1 Contents 1. Logins 2. Process Groups 3. Sessions 4. Controlling Terminal 5. Job Control 숙대창병모 2 로그인 숙대창병모 3 터미널로그인 /etc/ttys: 1 line per terminal device getty: opens terminal device

More information

/chroot/lib/ /chroot/etc/

/chroot/lib/ /chroot/etc/ 구축 환경 VirtualBox - Fedora 15 (kernel : 2.6.40.4-5.fc15.i686.PAE) 작동 원리 chroot유저 ssh 접속 -> 접속유저의 홈디렉토리 밑.ssh의 rc 파일 실행 -> daemonstart실행 -> daemon 작동 -> 접속 유저만의 Jail 디렉토리 생성 -> 접속 유저의.bashrc 의 chroot 명령어

More information

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D> 리눅스 오류처리하기 2007. 11. 28 안효창 라이브러리함수의오류번호얻기 errno 변수기능오류번호를저장한다. 기본형 extern int errno; 헤더파일 라이브러리함수호출에실패했을때함수예 정수값을반환하는함수 -1 반환 open 함수 포인터를반환하는함수 NULL 반환 fopen 함수 2 유닉스 / 리눅스 라이브러리함수의오류번호얻기 19-1

More information

Microsoft PowerPoint - chap6 [호환 모드]

Microsoft PowerPoint - chap6 [호환 모드] 제 6 장프로세스 (Process) 숙대창병모 1 내용 프로세스시작 / 종료 명령중인수 / 환경변수 메모리배치 / 할당 비지역점프 숙대창병모 2 프로세스시작 / 종료 숙대창병모 3 Process Start Kernel exec system call user process Cstart-up routine call return int main(int argc,

More information

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

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx #include int main(void) { int num; printf( Please enter an integer "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 을 작성하면서 C 프로그램의

More information

<4D F736F F F696E74202D BDC3B1D7B3CEB0FA20BDC3B1D7B3CE20C3B3B8AE2E707074>

<4D F736F F F696E74202D BDC3B1D7B3CEB0FA20BDC3B1D7B3CE20C3B3B8AE2E707074> 10 장시그널과시그널처리 시그널과시그널처리 - sigemptyset, sigfillset - sigaddset, sigdelset, sigismember - sigaction - sigprocmask - kill, raise - alarm - pause 1 1. 서론 시그널의종류 이름설명 DA SIGABRT abort() 를호출할때발생 SIGALRM 설정된알람시간이경과한겨우발생

More information

제1장 Unix란 무엇인가?

제1장  Unix란 무엇인가? 4 장파일 컴퓨터과학과박환수 1 2 4.1 시스템호출 컴퓨터시스템구조 유닉스커널 (kernel) 하드웨어를운영관리하여다음과같은서비스를제공 파일관리 (File management) 프로세스관리 (Process management) 메모리관리 (Memory management) 통신관리 (Communication management) 주변장치관리 (Device

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 UNIX 및실습 8 장. 프로세스와사용자명령 익히기 1 학습목표 유닉스에서프로세스가무엇인지그개념을이해한다. 프로세스와관련된명령의사용방법을익힌다. 포그라운드처리와백그라운드처리의차이를이해한다. 사용자정보를보는명령의사용방법을익힌다. 2 Section 01 프로세스란 프로세스 (process) 현재시스템에서실행중인프로그램 프로세스는고유번호를가진다. Process ID

More information

Microsoft PowerPoint - SP6장-시그널.ppt [호환 모드]

Microsoft PowerPoint - SP6장-시그널.ppt [호환 모드] UNIX System Programming Ki-Hyun, JUNG Email : kingjung@paran.com 구성 1 장 : 기본적인개념들과기초적인용어들 2 장 : 파일을다루는시스템호출 primitives 3 장 : 파일에대한문맥상의특성 4 장 : 유닉스디렉토리개념 5 장 : 유닉스프로세스의기본적인성질과제어 6 장 : 프로세스간통신 7 장 : 유용한유닉스프로세스간통신기법

More information

Microsoft PowerPoint - 09-Pipe

Microsoft PowerPoint - 09-Pipe 9. 파이프 상명대학교소프트웨어학부 파이프 시그널은이상한사건이나오류를처리하는데는이용하지만, 한프로세스로부터다른프로세스로대량의정보를전송하는데는부적합하다. 파이프 한프로세스를다른관련된프로세스에연결시켜주는단방향의통신채널 2 pipe() Usage #include int pipe(int filedes[2]); 3 < ex_1.c > #include

More information

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과 임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과 System call table and linkage v Ref. http://www.ibm.com/developerworks/linux/library/l-system-calls/ - 2 - Young-Jin Kim SYSCALL_DEFINE 함수

More information

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

금오공대 컴퓨터공학전공 강의자료 C 프로그래밍프로젝트 Chap 14. 포인터와함수에대한이해 2013.10.09. 오병우 컴퓨터공학과 14-1 함수의인자로배열전달 기본적인인자의전달방식 값의복사에의한전달 val 10 a 10 11 Department of Computer Engineering 2 14-1 함수의인자로배열전달 배열의함수인자전달방식 배열이름 ( 배열주소, 포인터 ) 에의한전달 #include

More information

The Pocket Guide to TCP/IP Sockets: C Version

The Pocket Guide to  TCP/IP Sockets: C Version 인터넷프로토콜 6 장 중급소켓프로그래밍 (2) 목차 제 6 장중급소켓프로그래밍 6.1 소켓옵션 6.2 시그널 6.3 넌블로킹입 / 출력 6.4 멀티태스킹 6.5 멀티플렉싱 6.6 다수의수신자처리 2 시그널 (Signal) 시그널이란? 예상치않은이벤트발생에따른일종의소프트웨어인터럽트 Ex) ctrl + c, ctrl + z, 자식프로세스의종료 외부에서프로세스에게전달할수있는유일한통로

More information

슬라이드 1

슬라이드 1 Task 통신및동기화 : 시그널 (Signal) Chapter #10 Cooperating Processes Signal 개요 Signal 처리 Signal 전송 타이머처리 강의목차 Unix System Programming 2 Cooperating Processes (1) Independent process cannot affect or be affected

More information

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

Microsoft PowerPoint - chap13-입출력라이브러리.pptx #include int main(void) int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; 1 학습목표 스트림의 기본 개념을 알아보고,

More information

제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다. 제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver. 2.0 jbyoo@konkuk.ac.kr http://dslab.konkuk.ac.kr 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다. 이번장에서학습할내용 이중포인터란무엇인가? 포인터배열 함수포인터 다차원배열과포인터 void 포인터 포인터는다양한용도로유용하게활용될수있습니다. 2 이중포인터

More information

본 강의에 들어가기 전

본 강의에 들어가기 전 유닉스프로그래밍및실습 9 장. 시그널 1. 시그널개념 시그널생명주기 시그널이발생한다. 커널이해당시그널을쌓아둔다.( 동일한시그널이오는경우하나만 ) 가능한시점에서커널이적절하게처리한다 커널의처리방법 시그널무시 아무런동작을하지않는다 절대무시할수없는시그널 SIGKILL SIGSTOP 시그널을붙잡아처리 현재코드경로를따라가는실행을중단하고, 시그널마다등록된함수로점프 기본동작

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Chapter 15 고급프로그램을 만들기위한 C... 1. main( ) 함수의숨겨진이야기 2. 헤더파일 3. 전처리문과예약어 1. main( ) 함수의숨겨진이야기 main( ) 함수의매개변수 [ 기본 14-1] main( ) 함수에매개변수를사용한예 1 01 #include 02 03 int main(int argc, char* argv[])

More information

Microsoft PowerPoint oshw1.ppt [호환 모드]

Microsoft PowerPoint oshw1.ppt [호환 모드] 과제 1 : 기본이해 제출일 : 4월 10일 ( 목 ) 까지 과제내용» 연습문제풀이 1 1.6 2 2.8 3 3.8» 프로그래밍과제 4 $ ftp 211.119.245.75 (id: anonymous, passwd: 자기loginID) 또는 (id: ftp, passwd:ftp) 한다음 # cd pub 하고 # get p.c 하여 p 프로그램의 version

More information

Microsoft PowerPoint - chap06-5 [호환 모드]

Microsoft PowerPoint - chap06-5 [호환 모드] 2011-1 학기프로그래밍입문 (1) chapter 06-5 참고자료 변수의영역과데이터의전달 박종혁 Tel: 970-6702 Email: jhpark1@seoultech.ac.kr h k 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- ehanbit.net 자동변수 지금까지하나의함수안에서선언한변수는자동변수이다. 사용범위는하나의함수내부이다. 생존기간은함수가호출되어실행되는동안이다.

More information

Microsoft PowerPoint oshw1.ppt [호환 모드]

Microsoft PowerPoint oshw1.ppt [호환 모드] 제출일 : 4월 5일 ( 목 ) 까지 과제내용» 연습문제풀이 1 1.6 2 2.8 3 3.8» 프로그래밍과제 4 5 과제 1 : 기본이해 # ftp 211.119.245.75 (id: anonymous, passwd: 자기 loginid) 또는 (id: ftp, passwd:ftp) 한다음 # cd pub 하고 # get p.c 하여 p 프로그램의 version

More information

2009년 상반기 사업계획

2009년 상반기 사업계획 소켓프로그래밍활용 IT CookBook, 유닉스시스템프로그래밍 학습목표 소켓인터페이스를활용한다양한프로그램을작성할수있다. 2/23 목차 TCP 기반프로그래밍 반복서버 동시동작서버 동시동작서버-exec함수사용하기 동시동작서버-명령행인자로소켓기술자전달하기 UDP 프로그래밍 3/23 TCP 기반프로그래밍 반복서버 데몬프로세스가직접모든클라이언트의요청을차례로처리 동시동작서버

More information

Chap04(Signals and Sessions).PDF

Chap04(Signals and Sessions).PDF Signals and Session Management 2002 2 Hyun-Ju Park (Signal)? Introduction (1) mechanism events : asynchronous events - interrupt signal from users : synchronous events - exceptions (accessing an illegal

More information

chap7.key

chap7.key 1 7 C 2 7.1 C (System Calls) Unix UNIX man Section 2 C. C (Library Functions) C 1975 Dennis Ritchie ANSI C Standard Library 3 (system call). 4 C?... 5 C (text file), C. (binary file). 6 C 1. : fopen( )

More information

vi 사용법

vi 사용법 네트워크프로그래밍 6 장과제샘플코드 - 1:1 채팅 (udp 버전 ) 과제 서버에서먼저 bind 하고그포트를다른사람에게알려줄것 클라이언트에서알려준포트로접속 서로간에키보드입력을받아상대방에게메시지전송 2 Makefile 1 SRC_DIR =../../common 2 COM_OBJS = $(SRC_DIR)/addressUtility.o $(SRC_DIR)/dieWithMessage.o

More information

제1장 Unix란 무엇인가?

제1장  Unix란 무엇인가? 1 소켓 2 1 소켓 클라이언트 - 서버모델 네트워크응용프로그램 클리이언트 - 서버모델을기반으로동작한다. 클라이언트 - 서버모델 하나의서버프로세스와여러개의클라이언트로구성된다. 서버는어떤자원을관리하고클라이언트를위해자원관련서비스를제공한다. 3 소켓의종류 소켓 네트워크에대한사용자수준의인터페이스를제공 소켓은양방향통신방법으로클라이언트 - 서버모델을기반으로프로세스사이의통신에매우적합하다.

More information

Microsoft PowerPoint oshw1&2.ppt [호환 모드]

Microsoft PowerPoint oshw1&2.ppt [호환 모드] 과제 1 : 기본이해 (4 월 8 일까지 ) 1. 1장 & 2장연습문제풀이 1 1.4 2 1.17 3 2.3 4 2.7 2. 프로그래밍과제 1» 연습문제 2.18 프로그램안에서가능한한많은 system call을사용한다. ptrace, dtrace 시스템호출추적방법은테스트한후수업시간에설명할예정이다. 3. 프로그래밍과제 2 ( 교재 p138 Chapter 3 프로젝트

More information

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

금오공대 컴퓨터공학전공 강의자료 C 프로그래밍프로젝트 Chap 13. 포인터와배열! 함께이해하기 2013.10.02. 오병우 컴퓨터공학과 13-1 포인터와배열의관계 Programming in C, 정재은저, 사이텍미디어. 9 장참조 ( 교재의 13-1 은읽지말것 ) 배열이름의정체 배열이름은 Compile 시의 Symbol 로서첫번째요소의주소값을나타낸다. Symbol 로서컴파일시에만유효함 실행시에는메모리에잡히지않음

More information

C++ Programming

C++ Programming C++ Programming 예외처리 Seo, Doo-okok clickseo@gmail.com http://www.clickseo.com 목 차 예외처리 2 예외처리 예외처리 C++ 의예외처리 예외클래스와객체 3 예외처리 예외를처리하지않는프로그램 int main() int a, b; cout > a >> b; cout

More information

<4D F736F F F696E74202D FB8DEB8F0B8AE20B8C5C7CE205BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D FB8DEB8F0B8AE20B8C5C7CE205BC8A3C8AF20B8F0B5E55D> 학습목표 통신프로그램이무엇인지이해한다. 을이용한 IPC 기법을이해한다. 함수를사용해프로그램을작성할수있다. IT CookBook, 유닉스시스템프로그래밍 2/20 목차 의개념 함수 해제함수 의보호모드변경 파일의크기확장 매핑된메모리동기화 데이터교환하기 의개념 파일을프로세스의메모리에매핑 프로세스에전달할데이터를저장한파일을직접프로세스의가상주소공간으로매핑 read, write

More information

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770> 연습문제해답 5 4 3 2 1 0 함수의반환값 =15 5 4 3 2 1 0 함수의반환값 =95 10 7 4 1-2 함수의반환값 =3 1 2 3 4 5 연습문제해답 1. C 언어에서의배열에대하여다음중맞는것은? (1) 3차원이상의배열은불가능하다. (2) 배열의이름은포인터와같은역할을한다. (3) 배열의인덱스는 1에서부터시작한다. (4) 선언한다음, 실행도중에배열의크기를변경하는것이가능하다.

More information

제12장 파일 입출력

제12장 파일 입출력 제 4 장파일입출력 리눅스시스템프로그래밍 청주대학교전자공학과 한철수 1 시스템호출 (system call) 파일 (file) 임의접근 (random access) 주요학습내용 2 4.1 절 커널의역할 (kernel) 커널 (kernel) 은운영체제의핵심부분으로서, 하드웨어를운영관리하는여러가지서비스를제공함 파일관리 (File management) 디스크 프로세스관리

More information

슬라이드 1

슬라이드 1 마이크로컨트롤러 2 (MicroController2) 2 강 ATmega128 의 external interrupt 이귀형교수님 학습목표 interrupt 란무엇인가? 기본개념을알아본다. interrupt 중에서가장사용하기쉬운 external interrupt 의사용방법을학습한다. 1. Interrupt 는왜필요할까? 함수동작을추가하여실행시키려면? //***

More information

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

Microsoft PowerPoint - chap10-함수의활용.pptx #include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 중 값에 의한 전달 방법과

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Network Programming Jo, Heeseung Network 실습 네트워크프로그래밍 멀리떨어져있는호스트들이서로데이터를주고받을수있도록프로그램을구현하는것 파일과는달리데이터를주고받을대상이멀리떨어져있기때문에소프트웨어차원에서호스트들간에연결을해주는장치가필요 이러한기능을해주는장치로소켓이라는인터페이스를많이사용 소켓프로그래밍이란용어와네트워크프로그래밍이랑용어가같은의미로사용

More information

고급 프로그래밍 설계

고급 프로그래밍 설계 UNIT 12 프로세스제어 광운대학교로봇 SW 교육원 최상훈 init 프로세스 2 init 프로세스 프로세스 ID : 1 시스템부팅젃차마지막에커널에의해실행됨 커널부팅이후 UNIX 시스템을뛰우는역핛을함 시스템의존적초기화파일들 /etc/rc* 파일들, /etc/inittab 과, /etc/init.d 의파일들을읽고시스템을특정핚상태 ( 이를테면다중사용자상태 ) 로설정함

More information

11장 포인터

11장 포인터 Dynamic Memory and Linked List 1 동적할당메모리의개념 프로그램이메모리를할당받는방법 정적 (static) 동적 (dynamic) 정적메모리할당 프로그램이시작되기전에미리정해진크기의메모리를할당받는것 메모리의크기는프로그램이시작하기전에결정 int i, j; int buffer[80]; char name[] = data structure"; 처음에결정된크기보다더큰입력이들어온다면처리하지못함

More information

Microsoft PowerPoint - [2009] 02.pptx

Microsoft PowerPoint - [2009] 02.pptx 원시데이터유형과연산 원시데이터유형과연산 원시데이터유형과연산 숫자데이터유형 - 숫자데이터유형 원시데이터유형과연산 표준입출력함수 - printf 문 가장기본적인출력함수. (stdio.h) 문법 ) printf( Test printf. a = %d \n, a); printf( %d, %f, %c \n, a, b, c); #include #include

More information

슬라이드 1

슬라이드 1 7.4 프로세스간통신 Interprocess Communication 기본적인프로세스간통신기법 데이터스트림과파이프 data stream and pipe 정보의송수신에사용되는일련의연속된데이터 a sequence of data used to send or receive information 예 : 프로세스와파일 ( 파일디스크립터을통하여 ) 을연결해주는데이터스트림

More information

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍 쉽게풀어쓴 C 언어 Express 제 9 장함수와변수 이번장에서학습할내용 변수의속성 전역, 지역변수 자동변수와정적변수 재귀호출 이번장에서는함수와변수와의관계를집중적으로살펴볼것이다. 또한함수가자기자신을호출하는재귀호출에대하여살펴본다. 변수의속성 변수의속성 : 이름, 타입, 크기, 값 + 범위, 생존시간, 연결 범위 (scope) : 변수가사용가능한범위, 가시성생존시간

More information

Microsoft PowerPoint - chap06-2pointer.ppt

Microsoft PowerPoint - chap06-2pointer.ppt 2010-1 학기프로그래밍입문 (1) chapter 06-2 참고자료 포인터 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- 포인터의정의와사용 변수를선언하는것은메모리에기억공간을할당하는것이며할당된이후에는변수명으로그기억공간을사용한다. 할당된기억공간을사용하는방법에는변수명외에메모리의실제주소값을사용하는것이다.

More information

2009년 상반기 사업계획

2009년 상반기 사업계획 메모리매핑 IT CookBook, 유닉스시스템프로그래밍 학습목표 통신프로그램이무엇인지이해한다. 메모리매핑을이용한 IPC 기법을이해한다. 메모리매핑함수를사용해프로그램을작성할수있다. 2/20 목차 메모리매핑의개념 메모리매핑함수 메모리매핑해제함수 메모리매핑의보호모드변경 파일의크기확장 매핑된메모리동기화 데이터교환하기 3/20 메모리매핑의개념 메모리매핑 파일을프로세스의메모리에매핑

More information

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

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Function) 1. 함수의개념 입력에대해적절한출력을발생시켜주는것 내가 ( 프로그래머 ) 작성한명령문을연산, 처리, 실행해주는부분 ( 모듈 ) 자체적으로실행되지않으며,

More information

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074> Chap #2 펌웨어작성을위한 C 언어 I http://www.smartdisplay.co.kr 강의계획 Chap1. 강의계획및디지털논리이론 Chap2. 펌웨어작성을위한 C 언어 I Chap3. 펌웨어작성을위한 C 언어 II Chap4. AT89S52 메모리구조 Chap5. SD-52 보드구성과코드메모리프로그래밍방법 Chap6. 어드레스디코딩 ( 매핑 ) 과어셈블리어코딩방법

More information

슬라이드 1

슬라이드 1 프로세스 (Process) (2) Chapter #9 강의목차 Process 관련시스템호출 Simple Shell Session Unix System Programming 2 프로세스정보 프로세스 ID 정보 프로세스정보 (1) PID(Process ID) 프로세스에할당되는유일한 ID( 정수값 ) PPID(Parent Process ID) 부모프로세스 ID PGID(Porcess

More information

Microsoft Word - FunctionCall

Microsoft Word - FunctionCall Function all Mechanism /* Simple Program */ #define get_int() IN KEYOARD #define put_int(val) LD A val \ OUT MONITOR int add_two(int a, int b) { int tmp; tmp = a+b; return tmp; } local auto variable stack

More information

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

Microsoft PowerPoint - ch09_파이프 [호환 모드] 학습목표 파이프를이용한 IPC 기법을이해한다. 이름없는파이프를이용해통신프로그램을작성할수있다. 이름있는파이프를이용해통신프로그램을작성할수있다. 파이프 IT CookBook, 유닉스시스템프로그래밍 2/20 목차 파이프의개념 이름없는파이프만들기 복잡한파이프생성 양방향파이프활용 이름있는파이프만들기 파이프의개념 파이프 두프로세스간에통신할수있도록해주는특수파일 그냥파이프라고하면일반적으로이름없는파이프를의미

More information

2009년 상반기 사업계획

2009년 상반기 사업계획 파이프 IT CookBook, 유닉스시스템프로그래밍 학습목표 파이프를이용한 IPC 기법을이해한다. 이름없는파이프를이용해통신프로그램을작성할수있다. 이름있는파이프를이용해통신프로그램을작성할수있다. 2/20 목차 파이프의개념 이름없는파이프만들기 복잡한파이프생성 양방향파이프활용 이름있는파이프만들기 3/20 파이프의개념 파이프 두프로세스간에통신할수있도록해주는특수파일 그냥파이프라고하면일반적으로이름없는파이프를의미

More information

강의10

강의10 Computer Programming gdb and awk 12 th Lecture 김현철컴퓨터공학부서울대학교 순서 C Compiler and Linker 보충 Static vs Shared Libraries ( 계속 ) gdb awk Q&A Shared vs Static Libraries ( 계속 ) Advantage of Using Libraries Reduced

More information

Chapter #01 Subject

Chapter #01  Subject Device Driver March 24, 2004 Kim, ki-hyeon 목차 1. 인터럽트처리복습 1. 인터럽트복습 입력검출방법 인터럽트방식, 폴링 (polling) 방식 인터럽트서비스등록함수 ( 커널에등록 ) int request_irq(unsigned int irq, void(*handler)(int,void*,struct pt_regs*), unsigned

More information

C 프로그램의 기본

C 프로그램의 기본 C 프로그램의기본 목차 C 프로그램의구성요소 주석 main 함수 출력 C 언어의입력과출력 변수 printf 함수 scanf 함수 2 예제 2-1 : 첫번째 C 프로그램 3 2.1.1 주석 주석의용도 프로그램에대한설명 프로그램전체에대한대략적인정보를제공 프로그램수행에영향을미치지않는요소 4 2.1.1 주석 주석사용방법 /* 과 */ 을이용한여러줄주석 // 을이용한한줄주석

More information

Microsoft PowerPoint - ch07 - 포인터 pm0415

Microsoft PowerPoint - ch07 - 포인터 pm0415 2015-1 프로그래밍언어 7. 포인터 (Pointer), 동적메모리할당 2015 년 4 월 4 일 교수김영탁 영남대학교공과대학정보통신공학과 (Tel : +82-53-810-2497; Fax : +82-53-810-4742 http://antl.yu.ac.kr/; E-mail : ytkim@yu.ac.kr) Outline 포인터 (pointer) 란? 간접참조연산자

More information

11장 포인터

11장 포인터 누구나즐기는 C 언어콘서트 제 9 장포인터 이번장에서학습할내용 포인터이란? 변수의주소 포인터의선언 간접참조연산자 포인터연산 포인터와배열 포인터와함수 이번장에서는포인터의기초적인지식을학습한다. 포인터란? 포인터 (pointer): 주소를가지고있는변수 메모리의구조 변수는메모리에저장된다. 메모리는바이트단위로액세스된다. 첫번째바이트의주소는 0, 두번째바이트는 1, 변수와메모리

More information

슬라이드 1

슬라이드 1 정적메모리할당 (Static memory allocation) 일반적으로프로그램의실행에필요한메모리 ( 변수, 배열, 객체등 ) 는컴파일과정에서결정되고, 실행파일이메모리에로드될때할당되며, 종료후에반환됨 동적메모리할당 (Dynamic memory allocation) 프로그램의실행중에필요한메모리를할당받아사용하고, 사용이끝나면반환함 - 메모리를프로그램이직접관리해야함

More information

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 (   ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각 JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( http://java.sun.com/javase/6/docs/api ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각선의길이를계산하는메소드들을작성하라. 직사각형의가로와세로의길이는주어진다. 대각선의길이는 Math클래스의적절한메소드를이용하여구하라.

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 KeyPad Device Control - Device driver Jo, Heeseung HBE-SM5-S4210 에는 16 개의 Tack Switch 를사용하여 4 행 4 열의 Keypad 가장착 4x4 Keypad 2 KeyPad 를제어하기위하여 FPGA 내부에 KeyPad controller 가구현 KeyPad controller 16bit 로구성된

More information

Microsoft PowerPoint - chap12-고급기능.pptx

Microsoft PowerPoint - chap12-고급기능.pptx #include int main(void) int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; 1 학습목표 가 제공하는 매크로 상수와 매크로

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 System Software Experiment 1 Lecture 5 - Array Spring 2019 Hwansoo Han (hhan@skku.edu) Advanced Research on Compilers and Systems, ARCS LAB Sungkyunkwan University http://arcs.skku.edu/ 1 배열 (Array) 동일한타입의데이터가여러개저장되어있는저장장소

More information

JVM 메모리구조

JVM 메모리구조 조명이정도면괜찮조! 주제 JVM 메모리구조 설미라자료조사, 자료작성, PPT 작성, 보고서작성. 발표. 조장. 최지성자료조사, 자료작성, PPT 작성, 보고서작성. 발표. 조원 이용열자료조사, 자료작성, PPT 작성, 보고서작성. 이윤경 자료조사, 자료작성, PPT작성, 보고서작성. 이수은 자료조사, 자료작성, PPT작성, 보고서작성. 발표일 2013. 05.

More information

BMP 파일 처리

BMP 파일 처리 BMP 파일처리 김성영교수 금오공과대학교 컴퓨터공학과 학습내용 영상반전프로그램제작 2 Inverting images out = 255 - in 3 /* 이프로그램은 8bit gray-scale 영상을입력으로사용하여반전한후동일포맷의영상으로저장한다. */ #include #include #define WIDTHBYTES(bytes)

More information

untitled

untitled int i = 10; char c = 69; float f = 12.3; int i = 10; char c = 69; float f = 12.3; printf("i : %u\n", &i); // i printf("c : %u\n", &c); // c printf("f : %u\n", &f); // f return 0; i : 1245024 c : 1245015

More information

본 강의에 들어가기 전

본 강의에 들어가기 전 C 기초특강 종합과제 과제내용 구조체를이용하여교과목이름과코드를파일로부터입력받아관리 구조체를이용하여학생들의이름, 학번과이수한교과목의코드와점수를파일로부터입력 학생개인별총점, 평균계산 교과목별이수학생수, 총점및평균을계산 결과를파일에저장하는프로그램을작성 2 Makefile OBJS = score_main.o score_input.o score_calc.o score_print.o

More information

<4D F736F F F696E74202D FC7C1B7CEBCBCBDBABFCD20BBE7BFEBC0DA20B8EDB7C920C0CDC8F7B1E22E >

<4D F736F F F696E74202D FC7C1B7CEBCBCBDBABFCD20BBE7BFEBC0DA20B8EDB7C920C0CDC8F7B1E22E > 8 장. 프로세스와사용자명령익히기 Contents 학습목표 프로세스의개념을이해한다 프로세스관련유닉스명령의사용방법을익힌다 포그라운드처리와백그라운드처리의차이를이해한다 사용자정보를보는유닉스명령의사용방법을익힌다 내용 프로세스의개념과종류 프로세스관리명령 포그란운드와백그라운드프로세스 사용자정보보기 01. 프로세스의개념과종류 프로세스 실행중인프로그램 종류 시스템프로세스

More information

3. 다음장에나오는 sigprocmask 함수의설명을참고하여다음프로그램의출력물과그출력물이화면이표시되는시점을예측하세요. ( 힌트 : 각줄이표시되는시점은다음 4 가지중하나. (1) 프로그램수행직후, (2) kill 명령실행직후, (3) 15 #include <signal.

3. 다음장에나오는 sigprocmask 함수의설명을참고하여다음프로그램의출력물과그출력물이화면이표시되는시점을예측하세요. ( 힌트 : 각줄이표시되는시점은다음 4 가지중하나. (1) 프로그램수행직후, (2) kill 명령실행직후, (3) 15 #include <signal. 학번 : 이름 : 1. 다음가정하에서아래프로그램의출력물을예측하세요. 가정 : 부모프로세스의 process id=20100, 자식프로세스의 process id=20101. int glob = 31; /* external variable in initialized data */ char buf[] = "a write to stdout\n"; int main(void)

More information

Microsoft PowerPoint - ch07 - 포인터 pm0415

Microsoft PowerPoint - ch07 - 포인터 pm0415 함수의인수 (argument) 전달방법 C 에서함수의인수전달방법 값에의한호출 (call-by-value): 기본적인방법 포인터에의한호출 (call-by-pointer): 포인터이용 참조에의한호출 (call-by-reference): 참조 (reference) 이용 7-35 값에의한호출 (call-by-value) 함수호출시에변수의값을함수에복사본으로전달 복사본이전달되며,

More information

The Pocket Guide to TCP/IP Sockets: C Version

The Pocket Guide to  TCP/IP Sockets: C Version 인터넷프로토콜 5 장 데이터송수신 (3) 1 파일전송메시지구성예제 ( 고정크기메시지 ) 전송방식 : 고정크기 ( 바이너리전송 ) 필요한전송정보 파일이름 ( 최대 255 자 => 255byte 의메모리공간필요 ) 파일크기 (4byte 의경우최대 4GB 크기의파일처리가능 ) 파일내용 ( 가변길이, 0~4GB 크기 ) 메시지구성 FileName (255bytes)

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Web server porting 2 Jo, Heeseung Web 을이용한 LED 제어 Web 을이용한 LED 제어프로그램 web 에서데이터를전송받아타겟보드의 LED 를조작하는프로그램을작성하기위해다음과같은소스파일을생성 2 Web 을이용한 LED 제어 LED 제어프로그램작성 8bitled.html 파일을작성 root@ubuntu:/working/web# vi

More information

untitled

untitled 시스템소프트웨어 : 운영체제, 컴파일러, 어셈블러, 링커, 로더, 프로그래밍도구등 소프트웨어 응용소프트웨어 : 워드프로세서, 스프레드쉬트, 그래픽프로그램, 미디어재생기등 1 n ( x + x +... + ) 1 2 x n 00001111 10111111 01000101 11111000 00001111 10111111 01001101 11111000

More information

컴파일러

컴파일러 YACC 응용예 Desktop Calculator 7/23 Lex 입력 수식문법을위한 lex 입력 : calc.l %{ #include calc.tab.h" %} %% [0-9]+ return(number) [ \t] \n return(0) \+ return('+') \* return('*'). { printf("'%c': illegal character\n",

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Chapter 08 함수 01 함수의개요 02 함수사용하기 03 함수와배열 04 재귀함수 함수의필요성을인식한다. 함수를정의, 선언, 호출하는방법을알아본다. 배열을함수의인자로전달하는방법과사용시장점을알아본다. 재귀호출로해결할수있는문제의특징과해결방법을알아본다. 1.1 함수의정의와기능 함수 (function) 특별한기능을수행하는것 여러가지함수의예 Page 4 1.2

More information

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

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100 2015-1 프로그래밍언어 9. 연결형리스트, Stack, Queue 2015 년 5 월 4 일 교수김영탁 영남대학교공과대학정보통신공학과 (Tel : +82-53-810-2497; Fax : +82-53-810-4742 http://antl.yu.ac.kr/; E-mail : ytkim@yu.ac.kr) 연결리스트 (Linked List) 연결리스트연산 Stack

More information

PowerPoint Presentation

PowerPoint Presentation 객체지향프로그래밍 클래스, 객체, 메소드 ( 실습 ) 손시운 ssw5176@kangwon.ac.kr 예제 1. 필드만있는클래스 텔레비젼 2 예제 1. 필드만있는클래스 3 예제 2. 여러개의객체생성하기 4 5 예제 3. 메소드가추가된클래스 public class Television { int channel; // 채널번호 int volume; // 볼륨 boolean

More information

Microsoft PowerPoint - chap06-8 [호환 모드]

Microsoft PowerPoint - chap06-8 [호환 모드] 2011-1 학기프로그래밍입문 (1) 참고자료 chap 6-8. 메모리동적할당 박종혁 Tel: 970-6702 Email: jhpark1@seoultech.ac.kr h k 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- ehanbit.net 동적할당의필요성 프로그램을작성하는단계에서필요한기억공간의크기를결정하는 것은정적할당이다. - 변수나배열의선언

More information

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

이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다. 2 제 17 장동적메모리와연결리스트 유준범 (JUNBEOM YOO) Ver. 2.0 jbyoo@konkuk.ac.kr http://dslab.konkuk.ac.kr 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다. 이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다.

More information

설계란 무엇인가?

설계란 무엇인가? 금오공과대학교 C++ 프로그래밍 jhhwang@kumoh.ac.kr 컴퓨터공학과 황준하 6 강. 함수와배열, 포인터, 참조목차 함수와포인터 주소값의매개변수전달 주소의반환 함수와배열 배열의매개변수전달 함수와참조 참조에의한매개변수전달 참조의반환 프로그래밍연습 1 /15 6 강. 함수와배열, 포인터, 참조함수와포인터 C++ 매개변수전달방법 값에의한전달 : 변수값,

More information

비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2

비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2 비트연산자 1 1 비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2 진수법! 2, 10, 16, 8! 2 : 0~1 ( )! 10 : 0~9 ( )! 16 : 0~9, 9 a, b,

More information

Microsoft PowerPoint - chap06-8.ppt

Microsoft PowerPoint - chap06-8.ppt 2010-1 학기프로그래밍입문 (1) 참고자료 chap 6-8. 메모리동적할당 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- 동적할당의필요성 프로그램을작성하는단계에서필요한기억공간의크기를결정하는것은정적할당이다. - 변수나배열의선언 프로그램의실행중에입력되는데이터에맞게기억공간을확보해야할때는동적할당이필요하다.

More information

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

목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2 제 8 장. 포인터 목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2 포인터의개요 포인터란? 주소를변수로다루기위한주소변수 메모리의기억공간을변수로써사용하는것 포인터변수란데이터변수가저장되는주소의값을 변수로취급하기위한변수 C 3 포인터의개요 포인터변수및초기화 * 변수데이터의데이터형과같은데이터형을포인터 변수의데이터형으로선언 일반변수와포인터변수를구별하기위해

More information

ABC 6장

ABC 6장 8 장포인터 김명호 내용 포인터소개 주소연산자 & 포인터변수 역참조연산자 * void 포인터 포인터연산 함수와포인터 메모리사상함수 동적메모리할당 포인터배열 const, restrict 함수포인터 1 포인터 지금까지할당받은메모리공간은변수이름으로접근했었음 예 int a, b, c; a = b + c; // a, b, c 를위한메모리할당 // a, b, c 이름으로메모리접근

More information

임베디드시스템설계강의자료 6 system call 1/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

임베디드시스템설계강의자료 6 system call 1/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과 임베디드시스템설계강의자료 6 system call 1/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과 시스템호출개요 리눅스에서는사용자공간과커널공간을구분 사용자프로그램은사용자모드, 운영체제는커널모드에서수행 커널공간에대한접근은커널 ( 특권, priviledged) 모드에서가능 컴퓨팅자원 (CPU, memory, I/O 등 ) 을안전하게보호 커널수행을안전하게유지

More information