IPC(Inter-Process Cmmuniciation)λ νλ‘μΈμ€λ€ μ¬μ΄μ λ°μ΄ν°λ₯Ό μ£Όκ³ λ°λ νμ, κ·Έμ λν λ°©λ² λλ κ²½λ‘λ₯Ό μλ―Ένλ€. pipeμ μ’ λ₯ pipeλ μμ κ·Έλ¦Όκ³Ό κ°μ΄ νλ‘μΈμ€μ λ°λΌ write, readλ₯Ό ν μ μλ€. λν κ΄λ ¨λ νλ‘μΈμ€κ° μ¬μ©νλ pipeμ κ΄λ ¨ μλ νλ‘μΈμ€ κ°μλ μ¬μ© κ°λ₯ν named pipeλ‘ λλλ€. pipe int process_pipe(pid_t pid, int *pipe_p, char *buf) { int status; if (pid == 0) { /* child process */ close(pipe_p[1]); read(pipe_p[0], buf, sizeof(buf)); printf("%d get msg %s\n", pid, buf); clo..
High-level API struct info { char ch[10]; int digit; }; int write_info(struct info *i) { FILE *fp = NULL; if (!(fp = fopen("/test", "w"))) return -1; if (fwrite(i, sizeof(struct info), 1 fp) != 1) { fclose(fp); return -1; } fclose(fp); return 0; } int read_info() { FILE *fp; struct info i; if (!(fp = fopen("/test", "r"))) return -1; if (fread(i, sizeof(struct info), 1) != 1) { fclose(fp); return..
Signal μΈν°λ½νΈλ μΈμ λ°μν μ§ μ μ μλ€. λ°λΌμ μ΄λ₯Ό λΉλκΈ°μ (Asynchronous) μ΄λ²€νΈλΌκ³ νλ©°, μκ·Έλμ μ΄λ₯Ό μ²λ¦¬νκΈ° μν λ©μ»€λμ¦μ΄λ€. μΈν°λ½νΈλ ν¬κ² H/W, S/W μΈν°λ½νΈλ‘ λλλ€. μκ·Έλμ S/W μΈν°λ½νΈμ΄λ€. μκ·Έλ μ΄λ²€νΈλ₯Ό λ°λλΌλ, μκ·Έλμ λν μ²λ¦¬λ₯Ό μ μνμ§ μμΌλ©΄ 무μλλ€. λ¨ `SIGKILL`, `SIGSTOP`μ 무μν μ μλ€. μκ·Έλμ μ’ λ₯λ `kill -l`μ ν΅ν΄ νμΈν μ μλ€. fork, execμ λ°λΌ μκ·Έλμ λ€λ₯΄κ² λμν μ μλ€. forkλ₯Ό νκ² λλ©΄ λΆλͺ¨ νλ‘μΈμ€λ₯Ό κ·Έλ‘ λ³΅μ νλ―λ‘, λμΌν μκ·Έλμ μμλ°λλ€. execμ κ²½μ° SIGTERMμ μμλ°μ§ μλλ€. SIGKILL #!/bin/bash if [ -z $1 ]; then echo "..
thread safeλ λ¨μν μ©μ΄λ§ 보λλΌλ, thread νκ²½μμ μ λμνλ ꡬλλΌλ κ²μ μ§κ΄μ μΌλ‘ μ μ μλ€. νμ§λ§ reentrantλ κ·Έλ μ§ μλ€. κ³Όκ±°μλ reentrantμ thread safeλ₯Ό νΌμ©νμ¬ μ°λ μ± λ€λ λλ¬ μμλ€. μ΄μ, μ΄ λμ λͺ νν ꡬλΆνκ³ μ΄ν΄ν΄λ³΄κ³ μ νλ€. thread safe `thread safe`λ λ§ κ·Έλλ‘, λ©ν° μ€λ λ νκ²½μμλ μλ μλν λλ‘ λμνλ μ½λλ₯Ό μλ―Ένλ€. μλ₯Ό λ€μ΄ `critical section`μ μ κ·Όνκ³ μ ν λ, μ€λ λ λ³λ‘ λκΈ°νλ₯Ό νμ§ μκ² λλ©΄ μμΉ μλ κ²°κ³Όμ μ§λ©΄νκ² λλ€. char arr[10]; int idx = 0; int func(char c) { int i = 0; if (idx >= sizeof(arr))..
CμΈμ΄λ‘ λμνλ νλ‘μΈμ€λ ν¬κ² 4κ°μ§μ λ©λͺ¨λ¦¬ μμ(text, data, heap, stack)μ ν΅ν΄ ꡬμ±λλ€. μ μ λ³μ, μ§μλ³μ λ± μ¬μ©λλ μμΉλ ν€μλ λ±μ λ°λΌ λ©λͺ¨λ¦¬ μμμ΄ λ¬λΌμ§κ² λλ€. μμ νλ‘κ·Έλ¨ λ¨μμμλ ν¬κ² μ κ²½ μ°μ§ μμλ λμ§λ§, λ€λ£¨λ μλ£κ΅¬μ‘°μ ν¬κΈ°κ° ν° κ²½μ° stack overflowμ κ°μ μ€λ₯μ μ§λ©΄ν μ μλ€. μ΄λ¬ν μ€λ₯λ₯Ό λ°©μ§νκΈ° μν΄μλ λ©λͺ¨λ¦¬ μμμ λν λͺ νν μ΄ν΄κ° νμνλ€. Memory Layout stack & heap stack ν¨μ νΈμΆ μ μμ±λκ³ , ν¨μ μ’ λ£ μ λ°νλλ μμμ΄λ€. μ¦ μ§μ λ³μ(local variable)μ΄ ν λΉλλ μμμ΄λ€. heap λμ μΌλ‘ ν λΉλλ λ³μλ₯Ό μν μμμ΄λ€. μλ₯Ό λ€λ©΄, malloc λλ callocμ ..
κΈ°μ΅ ν΄λμ€ μ§μ μ(Storage class specifiler)λ λ³μλ₯Ό μν κΈ°μ΅μ₯μΉ ν λΉ κ΄λ¦¬μ ν¨μ¨μ±μ λ΄λΉνλ€. λν λ©λͺ¨λ¦¬, λ μ§μ€ν°, μ€ν λ± μ΄λμ ν λΉνλλμ λ°λΌ scopeμ life timeμ΄ λ¬λΌμ§κ² λλ€. λ°λΌμ κ° κΈ°μ΅ ν΄λμ€μ λν νΉμ§μ λͺ νν μκ³ μ½λλ₯Ό μμ±νλ κ²μ΄ μ’λ€. auto νν μ¬μ©νλ λ³μλ‘, μ무κ²λ μ§μ νμ§ μμΌλ©΄ μλμΌλ‘ `auto` ν€μλκ° λΆκ² λλ€. μ΄λ μ μΈλ μμ λλ ν¨μλ₯Ό λ²μ΄λλ©΄ μ¬λΌμ§κ² λλ©°, μ€ν μ€μλ λ©λͺ¨λ¦¬μ `stack`μ μμΉνκ² λλ€. register ν΄λΉ ν€μλλ₯Ό μ§μ ν λ³μλ₯Ό CPUμ `register`μ μ μ₯νλλ‘ μμ²ν λ μ¬μ©νλ€. μ΄λ μ»΄νμΌλ¬μ λ°λΌ μ¬μ©μκ° `register`λΌκ³ λͺ μνμμμλ λΆκ΅¬νκ³ `auto`..
리λ μ€μμ λ΄κ° μνλ νλ‘μΈμ€λ₯Ό ν λΉνκΈ° μν΄, μ μ λ 벨μμ fork()λ₯Ό νμ©νμ¬ λμ μ€ν νλ‘κ·Έλ¨μ λΆλͺ¨λ‘ νλ μμ νλ‘μΈμ€λ₯Ό μμ±ν μ μλ€. fork()κ° μ΄λ€ μμΌλ‘ λμνλμ§ μ νν μ΄ν΄νμ§ λͺ»νλ€λ©΄, μμΉ μλ κ²°κ³Όλ₯Ό λ§λ€ μ μμΌλ―λ‘ μ 리ν΄λ³΄κ³ μ νλ€. fork μ΄ν΄λ³΄κΈ° 리λ μ€μμ μμ κ°μ΄ `man fork`λ₯Ό μ λ ₯νλ©΄ `fork()`μ λν μ€λͺ μ΄ λμ¨λ€. κ°λ¨ν μ€λͺ νμλ©΄, `fork()`λ₯Ό νΈμΆνλ νλ‘μΈμ€, μ¦ λΆλͺ¨ νλ‘μΈμ€λ₯Ό κ·Έλλ‘ λ³΅μ ν μλ‘μ΄ νλ‘μΈμ€λ₯Ό μμ±νλ€. λν, μ€ν κ²°κ³Όμ λ°λΌ λ°ν κ²°κ³Όλ μμ΄νλ€. μλ‘μ΄ νλ‘μΈμ€λ₯Ό ν λΉν μ μλ κ²½μ°λ `-1`μ λ°ννλ€. λΆλͺ¨ νλ‘μΈμ€μ κ²½μ° μμ±ν μμ νλ‘μΈμ€μ `pid`λ₯Ό λ°ννλ©°, μμ νλ‘μΈμ€μ κ²½μ° `0`μ..
λ ν νΌμ μ νκ²½ κ°μ¬λμ Secure & Generic C κ°μλ₯Ό λ£κ³ , μ 리ν λ΄μ©μ λλ€. ν΄λΉ λ΄μ©μ μ μκΆμ μ νκ²½ κ°μ¬λμκ² μμ΅λλ€. λμ ν λΉ user levelμμ μ¬μ©ν μ μλ λμ ν λΉμΌλ‘λ λνμ μΌλ‘ `malloc`κ³Ό `calloc`μ΄ μλ€. `malloc`μ μ¬μ©νκ³ μ νλ λ©λͺ¨λ¦¬ 곡κ°μ ν λΉ ν λ³λμ μ΄κΈ°νκ° μμ΄ μ°λ κΈ° κ°μ κ°λλ€. μ΄μ λ¬λ¦¬ `calloc`μ λ©λͺ¨λ¦¬ κ³΅κ° ν λΉ νμ ν λΉλ 곡κ°μ λͺ¨λ 0μΌλ‘ μ΄κΈ°ν νλ€. malloc mallocμ parameterλ‘ ν λΉνκ³ μ νλ ν¬κΈ°λ₯Ό λ°λλ€. 보ν΅μ ν λΉνκ³ μ νλ 곡κ°μ λ°μ΄ν° νμ μ λ°λΌ `sizeof(λ°μ΄ν° νμ )` μ°μ°μ ν΅ν΄ ν λΉνλ€. λ§μ½ mallocμ μ¬μ©νμ¬ ν¬κΈ°κ° 5μΈ int 1μ°¨μ λ°°μ΄μ ν λΉνλ€λ©΄ ..