<4D F736F F F696E74202D FBDC3BDBAC5DB56C0C720C7C1B7CEBCBCBDBAB0A320C5EBBDC5205BC8A3C8AF20B8F0B5E55D>
|
|
- 현석 채
- 5 years ago
- Views:
Transcription
1 학습목표 유닉스시스템V에서제공하는 IPC기법을이해한다. 메시지큐를이용해통신프로그램을작성할수있다. 공유메모리를이용해통신프로그램을작성할수있다. 세마포어를이용한 IPC기법을배운다. 시스템 V 의프로세스간통신 IT CookBook, 유닉스시스템프로그래밍 2/42 목차 시스템 V IPC 기초 시스템 V IPC 관련명령 메시지큐 공유메모리 세마포어 시스템 V IPC 기초 [1] 시스템 V IPC 시스템 V 계열유닉스에서개발해제공하는프로세스간통신방법 메시지큐, 공유메모리, 세마포어 공통요소 시스템 V IPC 를사용하기위해서는 IPC 객체를생성해야함. IPC 객체를생성하기위해공통적으로사용하는기본요소는키와식별자 키생성 키로 IPC_PRIVATE 지정 ftok 함수로키생성 key_t ftok(const char *path, int id); 인자로파일시스템에이미존재하는임의의파일의경로명과 1~255 사이의번호지정 키의구조에서 id(8 비트 ) 에인자로지정한번호저장. 번호에 0 은지정하지않는다. 3/42 4/42
2 시스템 V IPC 기초 [2] IPC 공통구조체 IPC 객체를생성하면 IPC 공통구조체가정의된다. 시스템 V IPC 관련명령 [1] 시스템 V IPC 정보검색 : ipcs 명령 시스템 V IPC 의정보를검색하고현재상태확인 struct ipc_perm { uid_t uid; gid_t gid; uid_t cuid; gid_t cgid; mode_t mode; uint_t seq; key_t key; int pad[4]; uid, gid : 구조체소유자ID 및소유그룹ID cuid, cgid : 구조체를생성한사용자ID, 그룹ID mode : 구조체에대한접근권한 seq : 슬롯의일련번호 key : 키값 pad : 향후사용을위해예약된영역 ipcs [ aabcijmopqstz] [ D mtype] -m : 공유메모리에관한정보만검색 -q : 메시지큐에관한정보만검색 -s : 세마포어에관한정보만검색 -a : -b, -c, -o, -p, -t 옵션으로검색하는항목모두출력 -A : 전체항목을모드검색 -b : 각방법의최댓값검색 -c : IPC 객체를생성한사용자의로그인명과그룹명검색 -D mtype : 메시지큐에서 mtype 으로지정한메시지만검색 -i : 공유메모리세그먼트에연결된 ISM 의개수출력 -J : IPC 객체생성자의프로젝트명출력 -o : 현재사용되고있는정보출력 -p : PID 정보출력 -t : 시간정보출력 5/42 6/42 시스템 V IPC 관련명령 [2] IPCS 명령사용예 현재동작중인 IPC 객체가하나도없는경우 # ipcs IPC status from <running system> as of 2009 년 2 월 18 일수요일오전 09 시 36 분 41 초 T ID KEY MODE OWNER GROUP Shared Memory: Semaphores: -A 옵션지정시 : 모든항목출력 # ipcs A IPC status from <running system> as of 2009년 2월 18일수요일오전 10시 36분 41초 T ID KEY MODE OWNER GROUP CREATOR CGROUP CBYTES QNUM QBYTES LSPID LRPID STIME RTIME CTIME PROJECT T ID KEY MODE OWNER GROUP CREATOR CGROUP NATTCH SEGSZ CPID LPID ATIME DTIME CTIME ISMATTCH PROJECT Shared Memory: T ID KEY MODE OWNER GROUP CREATOR CGROUP NSEMS OTIME CTIME PROJECT Semaphores: 7/42 시스템 V IPC 관련명령 [3] 시스템 V IPC 정보삭제 : ipcrm ipcrm [ m shmid] [ q msqid] [ s semid] [ M shmkey] [ Q msgkey] [ S emkey] -m shmid : 공유메모리삭제 -q msqid : 메시지큐삭제 -s semid : 세마포어삭제 -M shmkey : shmkey 로지정한공유메모리삭제 -Q msgkey : msgkey 로지정한공유메모리삭제 -S semkey : semkey 로지정한공유메모리삭제 8/42
3 메시지큐 [1] 메시지큐 파이프와유사하나파이프는스트림기반으로동작하고메시지큐는메시지단위로동작 각메시지의최대크기는제한되어있음 각메시지에는메시지유형이있어수신프로세스는어떤유형의메시지를받을것인지선택가능 메시지큐생성 : msgget(2) #include <sys/msg.h> int msgget(key_t key, int msgflg); key : IPC_PRIVATE 또는 ftok 로생성한키값 msgflg : 플래그와접근권한지정 IPC_CREAT : 새로운키면식별자를새로생성 IPC_EXCL : 이미존재하는키면오류발생 메시지큐식별자를리턴 (msqid_ds 구조체 ) 메시지큐 [2] msqid_ds 구조체 struct msqid_ds { struct ipc_perm msg_perm; struct msg *msg_first; struct msg *msg_last; msglen_t msg_cbytes; msgqnum_t msg_qnum; msglen_t msg_qbytes; pid_t msg_lspid; pid_t msg_lrpid; time_t msg_stime; int32_t msg_pad1; time_t msg_rtime; int32_t msg_pad2; time_t msg_ctime; int32_t msg_pad3; short msg_cv; short msg_qnum_cv; long msg_pad4[3]; msg_perm: IPC공통구조체 msg_first: 첫번째메시지에대한포인터 msg_last: 마지막메시지에대한포인터 msg_cbytes: 현재메시지큐에있는총바이트수 msg_qnum: 메시지큐에있는메시지개수 msg_qbytes: 메시지큐의최대크기 msg_lspid: 마지막으로메시지를보낸프로세스ID msg_lrpid: 마지막으로메시지를읽은프로세스ID msg_stime: 마지막으로메시지를보낸시각 msg_rtime: 마지막으로메시지를읽은시각 msg_ctime: 마지막으로메시지큐의권한변경시각 msg_pad1,2,3: 예비공간 9/42 10/42 메시지큐 [3] [ 예제 10-1] 메시지큐생성및메시지전송하기 ex10_1.c 메시지전송 : msgsnd(2) #include <sys/msg.h> int msgsnd(int msqid, const void *msgp, size_t msqid : 메시지큐식별자 msgp : 메시지버퍼주소 msgsz : 메시지버퍼크기 msgflg : 블록모드 (0)/ 비블록모드 (IPC_NOWAIT) 메시지버퍼구조체 struct msqbuf { long mtype; char mtext[1]; mtype : 메시지유형으로양수를지정 mtext : 메시지내용저장 msgsz, int msgflg); 06 struct mymsgbuf { 07 long mtype; 08 char mtext[80]; 메시지버퍼정의 int main(void) { 12 key_t key; 13 int msgid; 14 struct mymsgbuf mesg; key = ftok("keyfile", 1); 키값생성 17 msgid = msgget(key, IPC_CREAT 0644); 18 if (msgid == 1) { 19 perror("msgget"); 20 exit(1); 21 } 22 메시지큐생성 11/42 12/42
4 [ 예제 10-1] 메시지큐생성및메시지전송하기 ex10_1.c 메시지큐 [4] 23 mesg.mtype = 1; 24 strcpy(mesg.mtext, "Message Q Test\n"); 보낼메시지만들기 if (msgsnd(msgid, (void *)&mesg, 80, IPC_NOWAIT) == 1) { 27 perror("msgsnd"); 28 exit(1); 메시지전송 29 } return 0; 32 } # ex10_1.out # ipcs qo IPC status from <running system> as of 2009 년 2 월 18 일수요일오후 2 시 01 분 14 초 T ID KEY MODE OWNER GROUP CBYTES QNUM q 1 0x100719c rw r r root other 80 1 메시지수신 : msgrcv(2) #include <sys/msg.h> ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long int msgtyp, int msgflg); msqid : 메시지큐식별자 msgp : 메시지버퍼주소 msgsz : 메시지버퍼크기 msgtyp : 읽어올메시지유형 msgflg : 블록모드 (0)/ 비블록모드 (IPC_NOWAIT) msgtyp 에지정할값 0 : 메시지큐의다음메시지를읽어온다. 양수 : 메시지큐에서 msgtyp 로지정한유형과같은메시지를읽어온다. 음수 : 메시지의유형이 msgtyp 로지정한값의절대값과같거나작은메시지를읽어온다. 13/42 14/42 [ 예제 10-2] 메시지수신하기 ex10_2.c 메시지큐 [5] 메시지제어 : msgctl(2) 05 struct mymsgbuf { 06 long mtype; #include <sys/msg.h> 07 char mtext[80]; 메시지버퍼정의 int msgctl(int msqid, int cmd, struct msqid_ds *buf); msqid : 메시지큐식별자 10 int main(void) { 11 struct mymsgbuf inmsg; cmd : 수행할제어기능 12 key_t key; buf : 제어기능에사용되는메시지큐구조체주소 13 int msgid, len; key = ftok("keyfile", 1); 송신측과같은키값생성 cmd에지정할값 16 if ((msgid = msgget(key, 0)) < 0) { IPC_RMID : 메시지큐제거 17 perror("msgget"); IPC_SET : 메시지큐정보중 msg_perm.uid, msg_perm.gid, msg_perm.mode, 18 exit(1); msg_qbytes 값을세번째인자로지정한값으로변경 19 } IPC_STAT : 현재메시지큐의정보를 buf에저장 20 메시지수신 21 len = msgrcv(msgid, &inmsg, 80, 0, 0); 22 printf("received Msg = %s, Len=%d\n", inmsg.mtext, len); 23 # 24ex10_2.out return 0; Received 25 } Msg = Message Q Test, Len=80 # ipcs qo IPC status from <running system> as of 2009년 2월 18일수요일오후 2시 03분 48초 T ID KEY MODE OWNER GROUP CBYTES QNUM q 1 0x100719c rw r r root other /42 16/42
5 [ 예제 10-3] 메시지큐삭제하기 ex10_3.c [ 예제 10-3] 실행결과 05 int main(void) { 06 key_t key; 07 int msgid; key = ftok("keyfile", 1); 키값생성 10 msgid = msgget(key, IPC_CREAT 0644); 11 if (msgid == 1) { 12 perror("msgget"); 13 exit(1); 14 } printf("before IPC_RMID\n"); 17 system("ipcs q"); 18 msgctl(msgid, IPC_RMID, (struct msqid_ds *)NULL); 19 printf("after IPC_RMID\n"); 20 system("ipcs q"); return 0; 23 } 메시지큐삭제 # ex10_3.out Before IPC_RMID IPC status from <running system> as of 2009 년 2 월 18 일수요일오후 2 시 21 분 47 초 T ID KEY MODE OWNER GROUP q 1 0x100719c rw r r root other After IPC_RMID IPC status from <running system> as of 2009 년 2 월 18 일수요일오후 2 시 21 분 47 초 T ID KEY MODE OWNER GROUP 17/42 18/42 공유메모리 [1] 공유메모리 같은메모리공간을두개이상의프로세스가공유하는것 같은메모리공간을사용하므로이를통해데이터를주고받을수있음 공유메모리생성 : shmget(2) #include <sys/shm.h> int shmget(key_t key, size_t size, int shmflg); key : IPC_PRIVATE 또는 ftok 로생성한키값 size : 공유할메모리크기 shmflg : 공유메모리의속성을지정하는플래그 IPC_CREAT, IPC_EXCL 공유메모리식별자를리턴 (shmid_ds 구조체 ) 공유메모리 [2] shmid_ds 구조체 struct shmid_ds { struct ipc_perm msg_perm; size_t shm_segsz; struct anon_map *shm_amp; pid_tt_t shm_lpid;; pid_t shm_cpid; shmatt_t shm_nattch; ulong_t shm_cnattch; time_t shm_atime; int32_t shm_pad1; time_t shm_dtime; int32_t shm_pad2; time_t shm_ctime; int32_t shm_pad3; int32_t shm_pad4[4]; shm_perm: IPC 공통구조체 shm_segsz: 공유메모리세그먼트크기 shm_lpid: 마지막으로 shmop 동작을한프로세스 ID shm_cpid : 공유메모리를생성한프로세스 ID shm_nattach: 공유메모리를연결하고있는프로세스수 shm_atime: 마지막으로공유메모리를연결한시각 shm_dtime: 마지막으로공유메모리연결을해제한시각 shm_ctime: 마지막으로공유메모리접근권한을변경한시각 19/42 20/42
6 [ 예제 10-4] 공유메모리생성하기 ex10_4.c 07 int main(void) { 08 key_t key; 09 int shmid; 10 키생성 11 key = ftok("shmfile", 1); 12 shmid = shmget(key, 1024, IPC_CREAT 0644); 13 if (shmid == 1) { 14 perror("shmget"); 15 exit(1); 16 } return 0; 19 } 공유메모리생성. # ex10_4.out # ipcs mo IPC status from <running system> as of 2009 년 2 월 18 일수요일오후 03 시 06 분 01 초 T ID KEY MODE OWNER GROUP NATTCH Shared Memory: m 0 0x100719b rw r r root other 0 공유메모리 [3] 공유메모리연결 : shmat(2) #include <sys/shm.h> void *shmat(int shmid, const void *shmaddr, int shmflg); shmid : 공유메모리식별자 shmaddr : 공유메모리를연결할주소 shmflg : 공유메모리에대한읽기 / 쓰기권한 0( 읽기 / 쓰기가능 ), SHM_RDONLY( 읽기전용 ) 공유메모리연결해제 : shmdt(2) #include <sys/shm.h> int shmdt(char *shmaddr); shmaddr: 연결을해제힐공유메모리주소 21/42 22/42 공유메모리 [4] 공유메모리제어 : shmctl(2) #include <sys/shm.h> int shmctl(int shmid, int cmd, struct shmid_ds *buf); cmd : 수행할제어기능 IPC_RMID : 공유메모리제거 IPC_SET : 공유메모리정보내용중 shm_perm.uid, shm_perm.gid, shm_perm.mode 값을세번째인자로지정한값으로변경 IPC_STAT : 현재공유메모리의정보를 buf 에지정한메모리에저장 SHM_LOCK : 공유메모리를잠근다. SHM_UNLOCK : 공유메모리의잠금을해제한다. [ 예제 10-5] 공유메모리사용하기 부모 / 자식프로세스간공유메모리사용예제 09 int main(void) { 10 int shmid, i; 11 char *shmaddr, *shmaddr2; shmid = shmget(ipc_private, 20, IPC_CREAT 0644); 14 if (shmid == 1) { 15 perror("shmget"); 공유메모리생성 16 exit(1); 17 } switch (fork()) { 20 case 1: 21 perror("fork"); 22 exit(1); 23 break; ex10_5.c 23/42 24/42
7 [ 예제 10-5] 공유메모리사용하기 ex10_5.c [ 예제 10-6] (1) listener ( 서버역할 ) ex10_6s.c 24 case 0: 25 shmaddr = (char *)shmat(shmid, (char *)NULL, 0); 26 printf("child Process =====\n"); 27 for (i=0; i<10; i++) 28 shmaddr[i] = 'a' + i; 29 shmdt((char *)shmaddr); 공유메모리에데이터기록후 30 exit(0); 공유메모리연결해제 31 break; 32 default: 33 wait(0); 34 shmaddr2 = (char *)shmat(shmid, (char *)NULL, 0); 35 printf("parent Process =====\n"); 36 for (i=0; i<10; i++) 37 printf("%c ", shmaddr2[i]); 38 printf("\n"); 39 sleep(5); 공유메모리연결해제 40 shmdt((char *)shmaddr2); 41 shmctl(shmid, IPC_RMID, (struct shmid_ds *)NULL); 42 break; 43 } return 0; 46 } 공유메모리삭제 공유메모리연결 공유메모리연결 공유메모리내용출력 # ex10_5.out Child Process ===== Parent Process ===== a b c d e f g h i j 25/42 독립적인프로세스간공유메모리사용예제 10 void handler(int dummy) { 11 ; 12 } int main(void) { 15 key_t key; 16 int shmid; 17 void *shmaddr; 18 char buf[1024]; 19 sigset_t mask; key = ftok("shmfile", 1); 키생성 22 shmid = shmget(key, 1024, IPC_CREAT 0666); sigfillset(&mask); 25 sigdelset(&mask, SIGUSR1); 26 sigset(sigusr1, handler); printf("listener wait for Talker\n"); 시그널처리지정 공유메모리생성 26/42 [ 예제 10-6] (1) listener ( 서버역할 ) ex10_6s.c 29 sigsuspend(&mask); 시그널올때까지대기 printf("listener Start =====\n"); 32 shmaddr = shmat(shmid, NULL, 0); 시그널이오면공유메모리연결 33 strcpy(buf, shmaddr); 34 printf("listener received : %s\n", buf); 메모리내용읽고출력 strcpy(shmaddr, "Have a nice day\n"); 37 sleep(3); 공유메모리에쓰기 38 shmdt(shmaddr); return 0; 41 } [ 예제 10-6] (2) talker( 클라이언트역할 ) ex10_6c.c 11 int main(int argc, char **argv) { 12 key_t key; 13 int shmid; 14 void *shmaddr; 15 char buf[1024]; key = ftok("shmfile", 1); 서버와같은키생성 18 shmid = shmget(key, 1024, 0); 공유메모리정보가져오기 shmaddr = shmat(shmid, NULL, 0); 21 strcpy(shmaddr, "Hello, I'm talker\n"); 공유메모리연결하고데이터기록 kill(atoi(argv[1]), SIGUSR1); 24 sleep(2); 시그널발송 25 strcpy(buf, shmaddr); printf("listener said : %s\n", buf); 28 system("ipcs mo"); 서버가보낸메시지읽어출력 29 shmdt(shmaddr); 30 shmctl(shmid, IPC_RMID, NULL); 공유메모리연결해제및삭제 return 0; 33 } 27/42 28/42
8 [ 예제 10-6] 실행결과 # listener & [1] 4946 # Listener wait for Talker Listener Start ===== Listener received : Hello, I'm talker # talker 4946 Listener said : Have a nice day IPC status from <running system> as of 2009 년 2 월 18 일수요일오후 07 시 53 분 12 초 T ID KEY MODE OWNER GROUP NATTCH Shared Memory: m 4 0x100719b rw rw rw root other 2 # ipcs IPC status from <running system> as of 2009 년 2 월 18 일수요일오후 07 시 53 분 57 초 T ID KEY MODE OWNER GROUP Shared Memory: Semaphores: 세마포어 [1] 세마포어 프로세스사이의동기를맞추는기능제공 한번에한프로세스만작업을수행하는부분에접근해잠그거나, 다시잠금을해제하는기능을제공하는정수형변수 세마포어를처음제안한에츠허르데이크스트라가사용한용어에따라잠금함수는 p 로표시하고해제함수는 v 로표시 세마포어기본동작구조 중요처리부분 (critical section) 에들어가기전에 p 함수를실행하여잠금수행 처리를마치면 v 함수를실행하여잠금해제 p(sem); // 잠금중요한처리부분 v(sem); // 잠금해제 29/42 30/42 세마포어 [2] p 함수의기본동작구조 p(sem) { while sem=0 do wait; sem 값을 1 감소 ; } sem 의초기값은 1 sem 이 0 이면다른프로세스가처리부분을수행하고있다는의미이므로 1 이될때까지기다린다. sem 이 0 이아니면 0 으로만들어다른프로세스가들어오지못하게함 v 함수의기본동작구조 v(sem) { sem 값을 1 증가 ; if ( 대기중인프로세스가있으면 ) 대기중인첫번째프로세스를동작시킨 } 31/42 세마포어 [3] 세마포어생성 : semget(2) #include <sys/sem.h> int semget(key_t key, int nsems, int semflg); nsems : 생성할세마포어개수 semflg : 세마포어접근속성 (IPC_CREAT, IPC_EXCL) semid_ds 구조체 struct semid_ds { struct ipc_perm sem_perm; struct sem *sem_base; ushort_t sem_nsems; time_t sem_otime; int32_t sem_pad1; time_t sem_ctime; int32_t sem_pad2; int sem_binary; long sem_pad3[3]; sem_perm: IPC 공통구조체 sem_base: 세마포어집합에서첫번째세마포어의주소 sem_nsems: 세모포어집합에서세마포어개수 sem_otime: 세마포어연산을수행한마지막시간 sem_ctime: 세마포어접근권한을마지막으로변경한시간 sem_binary: 세마포어종류를나타내는플래그 32/42
9 세마포어 [4] 세마포어 [5] sem 구조체 세마포어정보를저장하는구조체 struct sem { ushort_t semval; pid_t sempid; ushort_t semncnt; ushort_t semzcnt; kcondvar_t semncnt_cv; kcondvar_t semzcnt_cv; semval : 세마포어값 sempid : 세마포어연산을마지막으로수행한프로세스 PID semncnt: 세마포어값이현재값보다증가하기를기다리는프로세스수 semzcnt: 세마포어값이 0 이되기를기다리는프로세스수 33/42 세마포어제어 : semctl(2) #include <sys/sem.h> int semctl(int semid, int semnum, int cmd, ); semnum : 기능을제어할세마포어번호 cmd : 수행할제어명령 : 제어명령에따라필요시사용할세마포어공용체주소 ( 선택사항 ) union semun { int val; struct semid_df * buf; ushort_t *array; } arg; cmd에지정할수있는값 IPC_RMID, IPC_SET, IPC_STAT : 메시지큐, 공유메모리와동일기능 GETVAL : 세마포어의 semval 값을읽어온다. SETVAL : 세마포어의 semval 값을 arg.val로설정한다. GETPID : 세마포어의 sempid 값을읽어온다. GETNCNT, GETZNCNT : 세마포어의 semncnt, semzcnt 값을읽어온다. GETALL : 세마포어집합에있는모든세마포어의 semval 값을 arg.array에저장 SETALL : 세마포어집합에있는모든세마포어의 semval 값을 arg.array의값으로설정 34/42 세마포어 [6] 세마포어 [7] 세마포어연산 : semop(2) #include <sys/sem.h> int semop(int semid, struct sembuf *sops, size_t nsops); sops : sembuf 구조체주소 nsops : sops 가가리키는구조체크기 세마포어연산 sembuf 구조체의 sem_op 항목에지정 세마포어연산을의미 if (sem_op < 0) { /* 세마포어잠금 */ wait until semval >= sem_op ; semval -= sem_op ; } else if (sem_op > 0) /* 세마포어잠금해제 */ semval += sem_op; else wait until semval is 0; struct sembuf { ushort_t short short sem_num; sem_op; sem_flg; 35/42 1. sem_op 가음수 : 세마포어잠금기능수행 semval 값이 sem_op 의절댓값과같거나크면 semval 값에서 sem_op 의절댓값을뺀다. semval 값이 sem_op 값보다작고 sem_flg 에 IPC_NOWAIT 가설정되어있으면 semop 함수는즉시리턴 semval 값이 sem_op 값보다작은데 sem_flg 에 IPC_NOWAIT 가설정되어있지않으면 semop 함수는 semncnt 값을증가시키고다음상황을기다린다. 1 semval 값이 sem_op의절대값보다같거나커진다. 이경우 semncnt 값은감소하고 semval 값에서 sem_op의절대값을뺀다. 2 시스템에서 semid가제거된다. 이경우 errno가 EIDRM으로설정되고 -1을리턴한다. 3 semop 함수를호출한프로세스가시그널을받는다. 이경우 semncnt 값은감소하고시그널처리함수를수행한다. 2. sem_op 가양수면이는세마포어의잠금을해제하고사용중이던공유자원을돌려준다. 이경우 sem_op 값이 semval 값에더해진다. 3. sem_op 값이 0 일경우 semval 값이 0 이면 semop 함수는즉시리턴한다. semval 값이 0 이아니고, sem_flg 에 IPC_NOWAIT 가설정되어있으면 semop 함수는즉시리턴한다. semval 값이 0 이아니고, sem_flg 에 IPC_NOWAIT 가설정되어있지않으면 semop 함수는 semzcnt 값을증가시키고 semval 값이 0 이되길기다린다. 36/42
10 [ 예제 10-7] (1) 세마포어생성과초기화 ex10_7.c 09 union semun { 10 int val; 11 struct semid_ds *buf; semun 공용체선언 12 unsigned short *array; int initsem(key_t semkey) { 세마포어생성및초기화함수 16 union semun semunarg; 17 int status = 0, semid; 18 세마포어생성 19 semid = semget(semkey, 1, IPC_CREAT IPC_EXCL 0600); 20 if (semid == 1) { 21 if (errno == EEXIST) 22 semid = semget(semkey, 1, 0); 23 } 24 else { 25 semunarg.val = 1; 세마포어값을 1로초기화 26 status = semctl(semid, 0, SETVAL, semunarg); 27 } if (semid == 1 status == 1) { 30 perror("initsem"); 31 return ( 1); 32 } return semid; 35 } 37/42 [ 예제 10-7] (2) 세마포어연산 int semlock(int semid) { 세마포어잠금함수 38 struct sembuf buf; buf.sem_num = 0; 41 buf.sem_op = 1; sem_op 값을음수로하여잠금기능수행 42 buf.sem_flg = SEM_UNDO; 43 if (semop(semid, &buf, 1) == 1) { 44 perror("semlock failed"); 45 exit(1); 46 } 47 return 0; 48 } int semunlock(int semid) { 세마포어잠금해제함수 51 struct sembuf buf; buf.sem_num = 0; 54 buf.sem_op = 1; sem_op 값을양수로하여잠금해제기능수행 55 buf.sem_flg = SEM_UNDO; 56 if (semop(semid, &buf, 1) == 1) { 57 perror("semunlock failed"); 58 exit(1); 59 } 60 return 0; 61 } ex10_7.c 38/42 [ 예제 10-7] (3) 세마포어호출 ex10_7.c [ 예제 10-7] 실행결과 63 void semhandle() { 64 int semid; 65 pid_t pid = getpid(); if ((semid = initsem(1)) < 0) 세마포어생성함수호출 68 exit(1); semlock(semid); 세마포어잠금함수호출 71 printf("lock : Process %d\n", (int)pid); 72 printf("\n"); 처리부분 73 sleep(1); 74 printf("unlock : Process %d\n", (int)pid); 75 semunlock(semid); 세마포어잠금해제함수호출 exit(0); 78 } int main(void) { 81 int a; 82 for (a = 0; a < 3; a++) 자식프로세스를 3개만든다. 83 if (fork() == 0) semhandle(); return 0; 86 } 39/42 세마포어기능을사용하지않을경우 # ex10_7.out Lock : Process 5262 Lock : Process 5263 Lock : Process 5264 Unlock : Process 5263 Unlock : Process 5262 Unlock : Process 5264 세마포어기능을사용할경우 # ex10_7.out Lock : Process 5195 Unlock : Process 5195 Lock : Process 5196 Unlock : Process 5196 Lock : Process 5197 Unlock : Process 프로세스가처리부분을실행하는중에다른프로세스도같이수행된다 프로세스가처리부분을실행하는중에다른프로세스는실행하지않고차례로실행한다. 40/42
11 IT CookBook, 유닉스시스템프로그래밍
2009년 상반기 사업계획
시스템 V 의프로세스간통신 IT CookBook, 유닉스시스템프로그래밍 학습목표 유닉스시스템V에서제공하는 IPC기법을이해한다. 메시지큐를이용해통신프로그램을작성할수있다. 공유메모리를이용해통신프로그램을작성할수있다. 세마포어를이용한 IPC기법을배운다. 2/42 목차 시스템 V IPC 기초 시스템 V IPC 관련명령 메시지큐 공유메모리 세마포어 3/42 시스템 V
More information고급 IPC 설비
고급프로세스갂통싞 #2 세마포어 네델란드의 E.W.Dijikstra 가프로세스동기화문제의해결방안으로제시 p( ) 또는 wait( ) if (sem!= 0) decrement sem by 1 else v( ) 또는 signal( ) wait until sem become non-zero, then decrement increment sem by one if (queue
More informationChap06(Interprocess Communication).PDF
Interprocess Communication 2002 2 Hyun-Ju Park Introduction (interprocess communication; IPC) IPC data transfer sharing data event notification resource sharing process control Interprocess Communication
More informationMicrosoft PowerPoint - UnixNetProg3rd_08_완.ppt [호환 모드]
8. 프로세스간통신 IPC(Inter Process Communication) 은멀티프로세스로구현된서버에서프로세스간에데이터를전달하는데사용 IPC 기술 파이프, 메시지큐, 세마포어, 공유메모리 1 8.1 파이프 2 파이프 (PIPE) 운영체제가제공하는프로세스간통신채널로서특별한타입의파일 일반파일과달리메모리에저장되지않고운영체제가관리하는임시파일 데이터저장용이아닌프로세스간데이터전달용으로사용
More information고급 IPC 설비
고급프로세스갂통싞 #1 Record Locking 여러프로세스가동시에한파일에접근하는경우경주상황 (race condition) 이발생할수있음 한가지해결방안 : Record locking 파일의일부분을잠그는행위 fcntl 을이용 #include Int fcntl(int filedes, int cmd, struct flock* ldata); cmd
More information메시지큐를이용한 IPC 프로그램구현과제보고서 1. 과제의목적 1 리눅스가지원하는프로세스간통신방식중다수의프로세스사이에구조화된데이터블럭, 즉메시지를전달하는데주로사용되는메시지큐방식에대하여무엇인지, 어떻게사용하는지공부한다. 2 공부한내용을점검하기위해기작성된 epda 프로세스관
[ R E P O R T ] 정보통신공학전공 200301582 김성태 메시지큐를이용한 IPC 프로그램구현과제보고서 1. 과제의목적 1 리눅스가지원하는프로세스간통신방식중다수의프로세스사이에구조화된데이터블럭, 즉메시지를전달하는데주로사용되는메시지큐방식에대하여무엇인지, 어떻게사용하는지공부한다. 2 공부한내용을점검하기위해기작성된 epda 프로세스관리프로그램과 sms 메시지전송에뮬레이션프로그램을활용하여
More information운영체제 실습 - Introduction -
운영체제실습 - IPC(InterProcess Communication) - Real-Time Computing and Communications Lab. Hanyang University jtlim@rtcc.hanyang.ac.kr dhchoi@rtcc.hanyang.ac.kr beespjh@gmail.com Introduction 조교소개 이름 : 임정택
More information슬라이드 1
Task 통신및동기화 : Message Queue, Semaphore Shared Memory Chapter #12 강의목차 IPC(Inter-Process Communication) 메시지큐 (Message Queue) 세마포어 (Semaphore) 공유메모리 (Shared Memory) Unix System Programming 2 IPC(Inter-Process
More informationMicrosoft PowerPoint - ch09_파이프 [호환 모드]
학습목표 파이프를이용한 IPC 기법을이해한다. 이름없는파이프를이용해통신프로그램을작성할수있다. 이름있는파이프를이용해통신프로그램을작성할수있다. 파이프 IT CookBook, 유닉스시스템프로그래밍 2/20 목차 파이프의개념 이름없는파이프만들기 복잡한파이프생성 양방향파이프활용 이름있는파이프만들기 파이프의개념 파이프 두프로세스간에통신할수있도록해주는특수파일 그냥파이프라고하면일반적으로이름없는파이프를의미
More information2009년 상반기 사업계획
파이프 IT CookBook, 유닉스시스템프로그래밍 학습목표 파이프를이용한 IPC 기법을이해한다. 이름없는파이프를이용해통신프로그램을작성할수있다. 이름있는파이프를이용해통신프로그램을작성할수있다. 2/20 목차 파이프의개념 이름없는파이프만들기 복잡한파이프생성 양방향파이프활용 이름있는파이프만들기 3/20 파이프의개념 파이프 두프로세스간에통신할수있도록해주는특수파일 그냥파이프라고하면일반적으로이름없는파이프를의미
More information2009년 상반기 사업계획
소켓프로그래밍활용 IT CookBook, 유닉스시스템프로그래밍 학습목표 소켓인터페이스를활용한다양한프로그램을작성할수있다. 2/23 목차 TCP 기반프로그래밍 반복서버 동시동작서버 동시동작서버-exec함수사용하기 동시동작서버-명령행인자로소켓기술자전달하기 UDP 프로그래밍 3/23 TCP 기반프로그래밍 반복서버 데몬프로세스가직접모든클라이언트의요청을차례로처리 동시동작서버
More information<4D F736F F F696E74202D FC7C1B7CEBCBCBDBA20BBFDBCBAB0FA20BDC7C7E0205BC8A3C8AF20B8F0B5E55D>
학습목표 프로세스를생성하는방법을이해한다. 프로세스를종료하는방법을이해한다. exec함수군으로새로운프로그램을실행하는방법을이해한다. 프로세스를동기화하는방법을이해한다. 프로세스생성과실행 IT CookBook, 유닉스시스템프로그래밍 2/24 목차 프로세스생성 프로세스종료함수 exec 함수군활용 exec 함수군과 fork 함수 프로세스동기화 프로세스생성 [1] 프로그램실행
More information2009년 상반기 사업계획
프로세스생성과실행 IT CookBook, 유닉스시스템프로그래밍 학습목표 프로세스를생성하는방법을이해한다. 프로세스를종료하는방법을이해한다. exec함수군으로새로운프로그램을실행하는방법을이해한다. 프로세스를동기화하는방법을이해한다. 2/24 목차 프로세스생성 프로세스종료함수 exec 함수군활용 exec 함수군과 fork 함수 프로세스동기화 3/24 프로세스생성 [1]
More information<4D F736F F F696E74202D FB8DEB8F0B8AE20B8C5C7CE205BC8A3C8AF20B8F0B5E55D>
학습목표 통신프로그램이무엇인지이해한다. 을이용한 IPC 기법을이해한다. 함수를사용해프로그램을작성할수있다. IT CookBook, 유닉스시스템프로그래밍 2/20 목차 의개념 함수 해제함수 의보호모드변경 파일의크기확장 매핑된메모리동기화 데이터교환하기 의개념 파일을프로세스의메모리에매핑 프로세스에전달할데이터를저장한파일을직접프로세스의가상주소공간으로매핑 read, write
More informationAbstract View of System Components
Operating System 10 주차 - IPC(InterProcess Communication) - Real-Time Computing and Communications Lab. Hanyang University jtlim@rtcc.hanyang.ac.kr yschoi@rtcc.hanyang.ac.kr shpark@rtcc.hanyang.ac.kr Contents
More information좀비프로세스 2
Signal & Inter-Process Communication Department of Computer Engineering Kyung Hee University. Choong Seon Hong 1 좀비프로세스 2 좀비프로세스 (zombie process) 좀비프로세스란프로세스종료후메모리상에서사라지지않는프로세스 좀비프로세스의생성이유. 자식프로세스는부모프로세스에게실행결과에대한값을반환해야한다.
More information2009년 상반기 사업계획
메모리매핑 IT CookBook, 유닉스시스템프로그래밍 학습목표 통신프로그램이무엇인지이해한다. 메모리매핑을이용한 IPC 기법을이해한다. 메모리매핑함수를사용해프로그램을작성할수있다. 2/20 목차 메모리매핑의개념 메모리매핑함수 메모리매핑해제함수 메모리매핑의보호모드변경 파일의크기확장 매핑된메모리동기화 데이터교환하기 3/20 메모리매핑의개념 메모리매핑 파일을프로세스의메모리에매핑
More information제1장 Unix란 무엇인가?
1 12 장파이프 2 12.1 파이프 파이프원리 $ who sort 파이프 3 물을보내는수도파이프와비슷 한프로세스는쓰기용파일디스크립터를이용하여파이프에데이터를보내고 ( 쓰고 ) 다른프로세스는읽기용파일디스크립터를이용하여그파이프에서데이터를받는다 ( 읽는다 ). 한방향 (one way) 통신 파이프생성 파이프는두개의파일디스크립터를갖는다. 하나는쓰기용이고다른하나는읽기용이다.
More informationMicrosoft 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 informationK&R2 Reference Manual 번역본
typewriter structunion struct union if-else if if else if if else if if if if else else ; auto register static extern typedef void char short int long float double signed unsigned const volatile { } struct
More informationABC 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
-Part3- 제 4 장동적메모리할당과가변인 자 학습목차 4.1 동적메모리할당 4.1 동적메모리할당 4.1 동적메모리할당 배울내용 1 프로세스의메모리공간 2 동적메모리할당의필요성 4.1 동적메모리할당 (1/6) 프로세스의메모리구조 코드영역 : 프로그램실행코드, 함수들이저장되는영역 스택영역 : 매개변수, 지역변수, 중괄호 ( 블록 ) 내부에정의된변수들이저장되는영역
More informationMicrosoft PowerPoint - all_CDSP_2(2009).ppt [호환 모드]
Contents Delivery Programming 2009 년 2 학기 숙명여자대학교정보과학부 멀티미디어과학전공 윤용익 yiyoon@sookmyung.ac.kr 강의목차 1 주 : 강의소개및 Part 1- Contents Delivery
More information1장. 유닉스 시스템 프로그래밍 개요
Unix 프로그래밍및실습 7 장. 시그널 - 과제보충 응용과제 1 부모프로세스는반복해서메뉴를출력하고사용자로부터주문을받아자식프로세스에게주문내용을알린다. (SIGUSR1) ( 일단주문을받으면음식이완료되기전까지 SIGUSR1 을제외한다른시그널은모두무시 ) timer 자식프로세스는주문을받으면조리를시작한다. ( 일단조리를시작하면음식이완성되기전까지 SIGALARM 을제외한다른시그널은모두무시
More informationMicrosoft PowerPoint - chap03-변수와데이터형.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 information10.
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 informationChapter #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 informationThe Pocket Guide to TCP/IP Sockets: C Version
얇지만얇지않은 TCP/IP 소켓프로그래밍 C 2 판 4 장 UDP 소켓 제 4 장 UDP 소켓 4.1 UDP 클라이언트 4.2 UDP 서버 4.3 UDP 소켓을이용한데이터송싞및수싞 4.4 UDP 소켓의연결 UDP 소켓의특징 UDP 소켓의특성 싞뢰할수없는데이터젂송방식 목적지에정확하게젂송된다는보장이없음. 별도의처리필요 비연결지향적, 순서바뀌는것이가능 흐름제어 (flow
More information6주차.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 informationchap 5: Trees
5. Threaded Binary Tree 기본개념 n 개의노드를갖는이진트리에는 2n 개의링크가존재 2n 개의링크중에 n + 1 개의링크값은 null Null 링크를다른노드에대한포인터로대체 Threads Thread 의이용 ptr left_child = NULL 일경우, ptr left_child 를 ptr 의 inorder predecessor 를가리키도록변경
More information[ 마이크로프로세서 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 information11장 포인터
Dynamic Memory and Linked List 1 동적할당메모리의개념 프로그램이메모리를할당받는방법 정적 (static) 동적 (dynamic) 정적메모리할당 프로그램이시작되기전에미리정해진크기의메모리를할당받는것 메모리의크기는프로그램이시작하기전에결정 int i, j; int buffer[80]; char name[] = data structure"; 처음에결정된크기보다더큰입력이들어온다면처리하지못함
More information제1장 Unix란 무엇인가?
1 소켓 2 1 소켓 클라이언트 - 서버모델 네트워크응용프로그램 클리이언트 - 서버모델을기반으로동작한다. 클라이언트 - 서버모델 하나의서버프로세스와여러개의클라이언트로구성된다. 서버는어떤자원을관리하고클라이언트를위해자원관련서비스를제공한다. 3 소켓의종류 소켓 네트워크에대한사용자수준의인터페이스를제공 소켓은양방향통신방법으로클라이언트 - 서버모델을기반으로프로세스사이의통신에매우적합하다.
More informationvi 사용법
네트워크프로그래밍 6 장과제샘플코드 - 1:1 채팅 (udp 버전 ) 과제 서버에서먼저 bind 하고그포트를다른사람에게알려줄것 클라이언트에서알려준포트로접속 서로간에키보드입력을받아상대방에게메시지전송 2 Makefile 1 SRC_DIR =../../common 2 COM_OBJS = $(SRC_DIR)/addressUtility.o $(SRC_DIR)/dieWithMessage.o
More informationMicrosoft PowerPoint - 09-Pipe
9. 파이프 상명대학교소프트웨어학부 파이프 시그널은이상한사건이나오류를처리하는데는이용하지만, 한프로세스로부터다른프로세스로대량의정보를전송하는데는부적합하다. 파이프 한프로세스를다른관련된프로세스에연결시켜주는단방향의통신채널 2 pipe() Usage #include int pipe(int filedes[2]); 3 < ex_1.c > #include
More informationPowerPoint 프레젠테이션
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 informationAPI 매뉴얼
PCI-DIO12 API Programming (Rev 1.0) Windows, Windows2000, Windows NT and Windows XP are trademarks of Microsoft. We acknowledge that the trademarks or service names of all other organizations mentioned
More informationMicrosoft PowerPoint - Lecture_Note_7.ppt [Compatibility Mode]
Unix Process Department of Computer Engineering Kyung Hee University. Choong Seon Hong 1 유닉스기반다중서버구현방법 클라이언트들이동시에접속할수있는서버 서비스를동시에처리할수있는서버프로세스생성을통한멀티태스킹 (Multitasking) 서버의구현 select 함수에의한멀티플렉싱 (Multiplexing)
More informationMicrosoft 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< 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<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>
리눅스 오류처리하기 2007. 11. 28 안효창 라이브러리함수의오류번호얻기 errno 변수기능오류번호를저장한다. 기본형 extern int errno; 헤더파일 라이브러리함수호출에실패했을때함수예 정수값을반환하는함수 -1 반환 open 함수 포인터를반환하는함수 NULL 반환 fopen 함수 2 유닉스 / 리눅스 라이브러리함수의오류번호얻기 19-1
More informationOCW_C언어 기초
초보프로그래머를위한 C 언어기초 3 장 : 변수와데이터형 2012 년 이은주 학습목표 변수와상수의개념에대해알아본다. 리터럴상수, 매크로상수, const 변수에대해알아본 다. C 언어의데이터형에대해알아본다. 2 목차 변수와상수 변수 상수 데이터형 문자형 정수형 실수형 sizeof 연산자 3 변수와상수 변수 : 값이변경될수있는데이터 상수 : 값이변경될수없는데이터
More information이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다. 2
제 17 장동적메모리와연결리스트 유준범 (JUNBEOM YOO) Ver. 2.0 jbyoo@konkuk.ac.kr http://dslab.konkuk.ac.kr 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다. 이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다.
More informationuntitled
if( ) ; if( sales > 2000 ) bonus = 200; if( score >= 60 ) printf(".\n"); if( height >= 130 && age >= 10 ) printf(".\n"); if ( temperature < 0 ) printf(".\n"); // printf(" %.\n \n", temperature); // if(
More informationChapter 4. LISTS
C 언어에서리스트구현 리스트의생성 struct node { int data; struct node *link; ; struct node *ptr = NULL; ptr = (struct node *) malloc(sizeof(struct node)); Self-referential structure NULL: defined in stdio.h(k&r C) or
More informationMicrosoft PowerPoint - chap05-제어문.pptx
int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); 1 학습목표 제어문인,, 분기문에 대해 알아본다. 인 if와 switch의 사용 방법과 사용시 주의사항에 대해 알아본다.
More information슬라이드 1
/ 유닉스시스템개요 / 파일 / 프로세스 01 File Descriptor file file descriptor file type unix 에서의파일은단지바이트들의나열임 operating system 은파일에어떤포맷도부과하지않음 파일의내용은바이트단위로주소를줄수있음 file descriptor 는 0 이나양수임 file 은 open 이나 creat 로 file
More informationchap7.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 informationOCW_C언어 기초
초보프로그래머를위한 C 언어기초 4 장 : 연산자 2012 년 이은주 학습목표 수식의개념과연산자및피연산자에대한학습 C 의알아보기 연산자의우선순위와결합방향에대하여알아보기 2 목차 연산자의기본개념 수식 연산자와피연산자 산술연산자 / 증감연산자 관계연산자 / 논리연산자 비트연산자 / 대입연산자연산자의우선순위와결합방향 조건연산자 / 형변환연산자 연산자의우선순위 연산자의결합방향
More information제1장 Unix란 무엇인가?
4 장파일 컴퓨터과학과박환수 1 2 4.1 시스템호출 컴퓨터시스템구조 유닉스커널 (kernel) 하드웨어를운영관리하여다음과같은서비스를제공 파일관리 (File management) 프로세스관리 (Process management) 메모리관리 (Memory management) 통신관리 (Communication management) 주변장치관리 (Device
More informationMicrosoft 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금오공대 컴퓨터공학전공 강의자료
C 프로그래밍프로젝트 Chap 14. 포인터와함수에대한이해 2013.10.09. 오병우 컴퓨터공학과 14-1 함수의인자로배열전달 기본적인인자의전달방식 값의복사에의한전달 val 10 a 10 11 Department of Computer Engineering 2 14-1 함수의인자로배열전달 배열의함수인자전달방식 배열이름 ( 배열주소, 포인터 ) 에의한전달 #include
More informationMicrosoft 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 informationThe Pocket Guide to TCP/IP Sockets: C Version
1 목포해양대해양컴퓨터공학과 UDP 소켓 네트워크프로그램설계 4 장 2 목포해양대해양컴퓨터공학과 목차 제 4장 UDP 소켓 4.1 UDP 클라이언트 4.2 UDP 서버 4.3 UDP 소켓을이용한데이터송신및수신 4.4 UDP 소켓의연결 3 목포해양대해양컴퓨터공학과 UDP 소켓의특징 UDP 소켓의특성 신뢰할수없는데이터전송방식 목적지에정확하게전송된다는보장이없음.
More informationMicrosoft Word - Network Programming_NewVersion_01_.docx
10. Unix Domain Socket 105/113 10. Unix Domain Socket 본절에서는 Unix Domain Socket(UDS) 에대한개념과이에대한실습을수행하고, 이와동시에비신뢰적인통신시스템의문제점에대해서분석하도록한다. 이번실습의목표는다음과같다. 1. Unix Domain Socket의사용법을익히고, IPC에대해서실습 2. TCP/IP의응용계층과전달계층의동작을구현및실습
More information<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CC0E7B0EDB0FCB8AE5C53746F636B5F4D616E D656E74732E637070>
1 #include 2 #include 3 #include 4 #include 5 #include 6 #include "QuickSort.h" 7 using namespace std; 8 9 10 Node* Queue[100]; // 추가입력된데이터를저장하기위한 Queue
More informationMicrosoft PowerPoint - Lecture_Note_5.ppt [Compatibility Mode]
TCP Server/Client Department of Computer Engineering Kyung Hee University. Choong Seon Hong 1 TCP Server Program Procedure TCP Server socket() bind() 소켓생성 소켓번호와소켓주소의결합 listen() accept() read() 서비스처리, write()
More informationPowerPoint 프레젠테이션
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 informationMicrosoft 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 informationMicrosoft PowerPoint - 04-UDP Programming.ppt
Chapter 4. UDP Dongwon Jeong djeong@kunsan.ac.kr http://ist.kunsan.ac.kr/ Dept. of Informatics & Statistics 목차 UDP 1 1 UDP 개념 자바 UDP 프로그램작성 클라이언트와서버모두 DatagramSocket 클래스로생성 상호간통신은 DatagramPacket 클래스를이용하여
More informationPowerPoint Presentation
#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 information61 62 63 64 234 235 p r i n t f ( % 5 d :, i+1); g e t s ( s t u d e n t _ n a m e [ i ] ) ; if (student_name[i][0] == \ 0 ) i = MAX; p r i n t f (\ n :\ n ); 6 1 for (i = 0; student_name[i][0]!= \ 0&&
More information03장.스택.key
---------------- DATA STRUCTURES USING C ---------------- 03CHAPTER 1 ? (stack): (LIFO:Last-In First-Out) 2 : top : ( index -1 ),,, 3 : ( ) ( ) -> ->. ->.... 4 Stack ADT : (LIFO) : init():. is_empty():
More information제9장 프로세스 제어
제 9 장프로세스제어 리눅스시스템프로그래밍 청주대학교전자공학과 한철수 제 9 장 목차 프로세스생성 프로그램실행 입출력재지정 프로세스그룹 시스템부팅 2 9.1 절 프로세스생성 fork() 시스템호출 새로운프로그램을실행하기위해서는먼저새로운프로세스를생성해야하는데, fork() 시스템호출이새로운프로세스를생성하는유일한방법임. 함수프로토타입 pid_t fork(void);
More informationuntitled
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학습목차 2.1 다차원배열이란 차원배열의주소와값의참조
- Part2- 제 2 장다차원배열이란무엇인가 학습목차 2.1 다차원배열이란 2. 2 2 차원배열의주소와값의참조 2.1 다차원배열이란 2.1 다차원배열이란 (1/14) 다차원배열 : 2 차원이상의배열을의미 1 차원배열과다차원배열의비교 1 차원배열 int array [12] 행 2 차원배열 int array [4][3] 행 열 3 차원배열 int array [2][2][3]
More informationPowerPoint 프레젠테이션
Network Programming Jo, Heeseung Network 실습 네트워크프로그래밍 멀리떨어져있는호스트들이서로데이터를주고받을수있도록프로그램을구현하는것 파일과는달리데이터를주고받을대상이멀리떨어져있기때문에소프트웨어차원에서호스트들간에연결을해주는장치가필요 이러한기능을해주는장치로소켓이라는인터페이스를많이사용 소켓프로그래밍이란용어와네트워크프로그래밍이랑용어가같은의미로사용
More information/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 information3. 다음장에나오는 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 informationMicrosoft PowerPoint - C프로그래밍-chap03.ppt [호환 모드]
Chapter 03 변수와자료형 2009 한국항공대학교항공우주기계공학부 (http://mercury.kau.ac.kr/sjkwon) 1 변수와자료유형 변수 프로그램에서자료값을임시로기억할수있는저장공간을변수 (variables) 변수 (Variables) 는컴퓨터의메모리인 RAM(Random Access Memory) 에저장 물건을담는박스라고생각한다면박스의크기에따라담을물건이제한됨
More informationMicrosoft PowerPoint - 10_Process
Linux 프로세스프로그래밍 Programming - 프로세스생성 : fork, exec - 프로세스동기화 : wait - 프로세스관리함수 프로세스관련함수 프로세스생성과종료 함수 의미 fork 자신과완전히동일한프로세스를생성한다. exec 계열지정한실행파일로부터프로세스를생성한다. exit 종료에따른상태값을부모프로세스에게전달하며프로세스를종료한다. atexit exit
More information11장 포인터
누구나즐기는 C 언어콘서트 제 9 장포인터 이번장에서학습할내용 포인터이란? 변수의주소 포인터의선언 간접참조연산자 포인터연산 포인터와배열 포인터와함수 이번장에서는포인터의기초적인지식을학습한다. 포인터란? 포인터 (pointer): 주소를가지고있는변수 메모리의구조 변수는메모리에저장된다. 메모리는바이트단위로액세스된다. 첫번째바이트의주소는 0, 두번째바이트는 1, 변수와메모리
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
비트연산자 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 informationPowerPoint 프레젠테이션
Chapter 10 포인터 01 포인터의기본 02 인자전달방법 03 포인터와배열 04 포인터와문자열 변수의주소를저장하는포인터에대해알아본다. 함수의인자를값과주소로전달하는방법을알아본다. 포인터와배열의관계를알아본다. 포인터와문자열의관계를알아본다. 1.1 포인터선언 포인터선언방법 자료형 * 변수명 ; int * ptr; * 연산자가하나이면 1 차원포인터 1 차원포인터는일반변수의주소를값으로가짐
More informationMicrosoft PowerPoint - chap06-2pointer.ppt
2010-1 학기프로그래밍입문 (1) chapter 06-2 참고자료 포인터 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- 포인터의정의와사용 변수를선언하는것은메모리에기억공간을할당하는것이며할당된이후에는변수명으로그기억공간을사용한다. 할당된기억공간을사용하는방법에는변수명외에메모리의실제주소값을사용하는것이다.
More information<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본 강의에 들어가기 전
유닉스프로그래밍및실습 9 장. 시그널 1. 시그널개념 시그널생명주기 시그널이발생한다. 커널이해당시그널을쌓아둔다.( 동일한시그널이오는경우하나만 ) 가능한시점에서커널이적절하게처리한다 커널의처리방법 시그널무시 아무런동작을하지않는다 절대무시할수없는시그널 SIGKILL SIGSTOP 시그널을붙잡아처리 현재코드경로를따라가는실행을중단하고, 시그널마다등록된함수로점프 기본동작
More informationLab 3. 실습문제 (Single linked list)_해답.hwp
Lab 3. Singly-linked list 의구현 실험실습일시 : 2009. 3. 30. 담당교수 : 정진우 담당조교 : 곽문상 보고서제출기한 : 2009. 4. 5. 학과 : 학번 : 성명 : 실습과제목적 : 이론시간에배운 Singly-linked list를실제로구현할수있다. 실습과제내용 : 주어진소스를이용해 Singly-linked list의각함수를구현한다.
More informationMicrosoft PowerPoint - 13 ¼ÒÄÏÀ» ÀÌ¿ëÇÑ Åë½Å 2.ppt
13 장소켓을이용한통신 (2) 소켓을이용한통신 (2) 함수 - recvfrom - sendto - uname - gethostname - gethostbyname - gethostbyaddr 1 1. 서론 소켓을사용하여비연결형모델로통신을하기위한함수와그외의함수 함수 의미 recvfrom 비연결형모델에서소켓을통해메시지를수신한다. sendto 비연결형모델에서소켓을통해메시지를송신한다.
More information<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>
#include "stdafx.h" #include "Huffman.h" 1 /* 비트의부분을뽑아내는함수 */ unsigned HF::bits(unsigned x, int k, int j) return (x >> k) & ~(~0
More informationMicrosoft PowerPoint - SP6장-시그널.ppt [호환 모드]
UNIX System Programming Ki-Hyun, JUNG Email : kingjung@paran.com 구성 1 장 : 기본적인개념들과기초적인용어들 2 장 : 파일을다루는시스템호출 primitives 3 장 : 파일에대한문맥상의특성 4 장 : 유닉스디렉토리개념 5 장 : 유닉스프로세스의기본적인성질과제어 6 장 : 프로세스간통신 7 장 : 유용한유닉스프로세스간통신기법
More information제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.
제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver. 2.0 jbyoo@konkuk.ac.kr http://dslab.konkuk.ac.kr 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다. 이번장에서학습할내용 이중포인터란무엇인가? 포인터배열 함수포인터 다차원배열과포인터 void 포인터 포인터는다양한용도로유용하게활용될수있습니다. 2 이중포인터
More informationThe Pocket Guide to TCP/IP Sockets: C Version
인터넷프로토콜 5 장 데이터송수신 (3) 1 파일전송메시지구성예제 ( 고정크기메시지 ) 전송방식 : 고정크기 ( 바이너리전송 ) 필요한전송정보 파일이름 ( 최대 255 자 => 255byte 의메모리공간필요 ) 파일크기 (4byte 의경우최대 4GB 크기의파일처리가능 ) 파일내용 ( 가변길이, 0~4GB 크기 ) 메시지구성 FileName (255bytes)
More informationPowerPoint 프레젠테이션
File System Jo, Heeseung 유닉스파일의특징 [1] 파일 유닉스에서파일은데이터저장, 장치구동, 프로세스간통신등에사용 일반파일, 디렉토리, 특수파일 일반파일 텍스트파일, 실행파일, 라이브러리, 이미지등유닉스에서사용하는대부분의파일 디렉토리 디렉토리도파일로취급 디렉토리에속한파일의목록과 inode 를가진파일 특수파일 - 장치파일 장치를파일로표현 예
More informationMicrosoft 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 informationMicrosoft PowerPoint - C++ 5 .pptx
C++ 언어프로그래밍 한밭대학교전자. 제어공학과이승호교수 연산자중복 (operator overloading) 이란? 2 1. 연산자중복이란? 1) 기존에미리정의되어있는연산자 (+, -, /, * 등 ) 들을프로그래머의의도에맞도록새롭게정의하여사용할수있도록지원하는기능 2) 연산자를특정한기능을수행하도록재정의하여사용하면여러가지이점을가질수있음 3) 하나의기능이프로그래머의의도에따라바뀌어동작하는다형성
More information<4D F736F F F696E74202D BDC3B1D7B3CEB0FA20BDC3B1D7B3CE20C3B3B8AE2E707074>
10 장시그널과시그널처리 시그널과시그널처리 - sigemptyset, sigfillset - sigaddset, sigdelset, sigismember - sigaction - sigprocmask - kill, raise - alarm - pause 1 1. 서론 시그널의종류 이름설명 DA SIGABRT abort() 를호출할때발생 SIGALRM 설정된알람시간이경과한겨우발생
More informationMicrosoft PowerPoint - chap11-포인터의활용.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 informationFrama-C/JESSIS 사용법 소개
Frama-C 프로그램검증시스템소개 박종현 @ POSTECH PL Frama-C? C 프로그램대상정적분석도구 플러그인구조 JESSIE Wp Aorai Frama-C 커널 2 ROSAEC 2011 동계워크샵 @ 통영 JESSIE? Frama-C 연역검증플러그인 프로그램분석 검증조건추출 증명 Hoare 논리에기초한프로그램검증도구 사용법 $ frama-c jessie
More informationBMP 파일 처리
BMP 파일처리 김성영교수 금오공과대학교 컴퓨터공학과 학습내용 영상반전프로그램제작 2 Inverting images out = 255 - in 3 /* 이프로그램은 8bit gray-scale 영상을입력으로사용하여반전한후동일포맷의영상으로저장한다. */ #include #include #define WIDTHBYTES(bytes)
More information3. 1 포인터란 3. 2 포인터변수의선언과사용 3. 3 다차원포인터변수의선언과사용 3. 4 주소의가감산 3. 5 함수포인터
- Part2-3 3. 1 포인터란 3. 2 포인터변수의선언과사용 3. 3 다차원포인터변수의선언과사용 3. 4 주소의가감산 3. 5 함수포인터 3.1 포인터란 ü ü ü. ü. ü. ü ( ) ? 3.1 ü. ü C ( ).? ü ü PART2-4 ü ( ) PART3-4 3.2 포인터변수의선언과사용 3.2 포인터 변수의 선언과 사용 (1/8) 포인터 변수의
More informationMicrosoft PowerPoint - 12 ¼ÒÄÏÀ» ÀÌ¿ëÇÑ Åë½Å 1.ppt
12 장 소켓을이용한통신 (1) 함수 - inet_addr - inet_ntoa - socket - bind - listen - accept - connect - recv -send 1 서론 파이프를사용하여통신을하기위한시스템호출 / 표준라이브러리함수 함수 의미 inet_addr 문자열형태의인터넷주소를바이너리형태로변환한다. inet_ntoa 바이너리형태의인터넷주소를문자열형태로변환한다.
More informationÀ©µµ³×Æ®¿÷ÇÁ·Î±×·¡¹Ö4Àå_ÃÖÁ¾
P a 02 r t Chapter 4 TCP Chapter 5 Chapter 6 UDP Chapter 7 Chapter 8 GUI C h a p t e r 04 TCP 1 3 1 2 3 TCP TCP TCP [ 4 2] listen connect send accept recv send recv [ 4 1] PC Internet Explorer HTTP HTTP
More informationUI TASK & KEY EVENT
T9 & AUTOMATA 2007. 3. 23 PLATFORM TEAM 정용학 차례 T9 개요 새로운언어 (LDB) 추가 T9 주요구조체 / 주요함수 Automata 개요 Automata 주요함수 추후세미나계획 질의응답및토의 T9 ( 2 / 30 ) T9 개요 일반적으로 cat 이라는단어를쓸려면... 기존모드 (multitap) 2,2,2, 2,8 ( 총 6번의입력
More informationMicrosoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt
변수와상수 1 변수란무엇인가? 변수 : 정보 (data) 를저장하는컴퓨터내의특정위치 ( 임시저장공간 ) 메모리, register 메모리주소 101 번지 102 번지 변수의크기에따라 주로 byte 단위 메모리 2 기본적인변수형및변수의크기 변수의크기 해당컴퓨터에서는항상일정 컴퓨터마다다를수있음 short
More informationMicrosoft 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 informationPowerPoint 프레젠테이션
UNIX 및실습 8 장. 프로세스와사용자 명령익히기 1 학습목표 유닉스에서프로세스가무엇인지그개념을이해한다. 프로세스와관련된유닉스명령의사용방법을익힌다. 포그라운드처리와백그라운드처리의차이를이해한다. 사용자정보를보는명령의사용방법을익힌다. 2 01. 프로세스의개념과종류 프로세스 (process) 현재시스템에서실행중인프로그램 프로세스는고유번호를가진다. Process
More information슬라이드 1
마이크로컨트롤러 2 (MicroController2) 2 강 ATmega128 의 external interrupt 이귀형교수님 학습목표 interrupt 란무엇인가? 기본개념을알아본다. interrupt 중에서가장사용하기쉬운 external interrupt 의사용방법을학습한다. 1. Interrupt 는왜필요할까? 함수동작을추가하여실행시키려면? //***
More information제12장 파일 입출력
제 4 장파일입출력 리눅스시스템프로그래밍 청주대학교전자공학과 한철수 1 시스템호출 (system call) 파일 (file) 임의접근 (random access) 주요학습내용 2 4.1 절 커널의역할 (kernel) 커널 (kernel) 은운영체제의핵심부분으로서, 하드웨어를운영관리하는여러가지서비스를제공함 파일관리 (File management) 디스크 프로세스관리
More informationChapter_06
프로그래밍 1 1 Chapter 6. Functions and Program Structure April, 2016 Dept. of software Dankook University http://embedded.dankook.ac.kr/~baeksj 이장의강의목표 2 문자의입력방법을이해한다. 중첩된 if문을이해한다. while 반복문의사용법을익힌다. do 반복문의사용법을익힌다.
More information