System Call Function VS Library Call Function
μ€λ ν¬μ€νΈλ κ°λ°μλ‘μ¨ λ°λμ μ§κ³ λμ΄κ°μΌν λΆλΆ μ€μ νλλ₯Ό μ¨λ³΄κ³ μ ν©λλ€.
ν¨μμ μ¬μ©
μ°λ¦¬λ μ½μ νλ©΄μ μ΄λ€ λ¬Έμμ΄μ μΆλ ₯νκ±°λ νμΌμ μ μΆλ ₯μ νλ€κ±°λ λ¬Έμμ΄μ μ λ ₯λ°κ² νκ³ μΆμ λ κ°κ° μ¬μ©νλ ν¨μλ₯Ό μ¬μ©μ ν©λλ€. κ·Έλμ κ·Έ ν¨μκ° κ΅¬νλμ΄ μλλλ‘ μΈμκ°μ λ£κ³ , κ·Έ μΈμκ°μ λ£μλλ‘ μ½λ©μ νλ©΄ μΆλ ₯ κ²°κ³Όκ° λμ€κ² λ©λλ€.
κ·Έλ°λ°, μ΄ ν¨μμλ λ κ°μ§μ μ‘΄μ¬λ‘ λλ©λλ€.
κ°λ Ή μλ₯Ό λ€μ΄λ³΄μλ©΄....
μ΄λ° μ½λκ° μμ΅λλ€. μ μ½λλ λ§μ½ νμΌμ΄ μ‘΄μ¬νμ§ μμΌλ©΄ μ€λ₯λ₯Ό λνλ΄κ³ , νλ‘κ·Έλ¨μ μ’ λ£νκ³ μμ΅λλ€. λμμ μ€λ₯ μ½λλ₯Ό μΆλ ₯νκ³ μμ£ .
λ€λ₯Έ μμ€ μ½λλ₯Ό ν λ² λ³΄κ² μ΅λλ€. μ΄ μ½λλ μμ νμΌμ μ°Ύμμ μ½κ³ , ν΄λΉ νμΌμ λ΄μ©μ μΆλ ₯νλ μμ€ μ½λμ΄μ£ .
λΆλͺ νλ μΌμ κ°μ μμ€ μ½λμ§λ§, μ½λ λ΄μ©μ λ€λ¦ λλ€. μ΄λ€ μ°¨μ΄κ° μλ κ±ΈκΉμ?
μ λ μμ€ μ½λμ Key Pointλ λ°λ‘ νμΌμ μ½κΈ° μν΄ μ¬μ©ν ν¨μμ λλ€. μ μμ μ½λλ CreateFileμ΄λΌλ ν¨μλ₯Ό μ¬μ©νμκ³ , νμλ fopenμ΄λΌκ³ νλ ν¨μλ₯Ό μ¬μ©νμ΅λλ€. λν νμΌμ΄λΌλ λμμ΄ μ μλ HANDLE ꡬ쑰체μ΄κ³ , νμλ FILE ꡬ쑰체μ λλ€.
λμΆ© μμλ λΆλ€μ μ λ μ½λκ° Windowsμ μ½λμ΄λ, Unix μ½λμ΄λλ₯Ό κ°λ¦¬λ κ²μ΄λΌκ³ μκ°ν κ²μ λλ€.
Library Call Function
μ¬λ¬λΆλ€μ΄ λ¨μνκ² μ¬μ©νλ fopen, fclose λ±μ C νμ€ ν¨μλ€μ λ°λ‘ μΌλ° λΌμ΄λΈλ¬λ¦¬ ν¨μμ λλ€. λΌμ΄λΈλ¬λ¦¬ ν¨μλ€μλ νλ‘κ·Έλλ° μΈμ΄μμ μ 곡νλ κΈ°λ³Έ ν¨μλ€κ³Ό μ»΄νμΌλ¬ λ³λ‘ μΆκ°μ μΌλ‘ μ 곡νλ APIλ€μ΄ λ³΄ν΅ λΌμ΄λΈλ¬λ¦¬ ν¨μμ μν©λλ€.
λλ¬Έμ νλ‘κ·Έλ¨ λ΄λΆμμ λ©λͺ¨λ¦¬ ν λΉ/ν΄μ κ° κ°λ₯ν©λλ€. μ¦, malloc ν¨μ λ±μ μ΄μ©μν΄μ λ©λͺ¨λ¦¬μ ν λΉκ³Ό ν΄μ κ° μμ λ‘λ€λ μ΄μΌκΈ°μ§μ.
κ·Έλμ, νμμ μ½λμλ νμΌμ μ΄ λ, ν¬μΈν°κ° λ΄λΆμμ μ¬μ©λ©λλ€.
System Call Function
μμμ μ¬μ©ν μ μμ μ½λλ System Call ν¨μλ₯Ό μ¬μ©ν κ²μ λλ€.
System Call ν¨μλ μμ© νλ‘κ·Έλ¨μμ μ΄μ체μ μκ² μ΄λ ν μμμ μꡬνλ νλμ μλ¨μ λλ€. μ»΄ν¨ν°μλ μ¬λ¬ κ°μ§ μμμ΄ μμ΅λλ€. νλ‘μΈμ, λ©λͺ¨λ , νλλμ€ν¬ .... νμ§λ§ μ°λ¦¬κ° μ»΄ν¨ν°λ₯Ό μΌμλ§μ λμ€λ κ²μ BIOS, κ·Έλ¦¬κ³ κ·Έ λ€μμ μ΄μ체μ μ λλ€.
λΆν μμμ λν΄μ μκ³ κ³μ λΆλ€μ΄λΌλ©΄, μλ§ μ»΄ν¨ν°μ λͺ¨λ μμμ μ΄μ체μ μμ κ΄λ¦¬νκ³ μλ€λ κ²μ μμ€ κ²μ λλ€. κ·Έλμ νλ‘κ·Έλ¨μμ μ΄λ€ μμμ κ°μ§κ³ μ¬ λλ μ΄μ체μ μ¦, 컀λμμ κ°μ ΈμμΌ ν©λλ€.
System Call Functionμ μ¬μ©ν΄μΌ νλ κ²½μ°λ μμμ ν λΉλ³΄λ€λ μ¬μ€ μ΄λ€ μ΄μ체μ μμμ νΉμ ν μμμ κ°μ§κ³ μΆμ λ μ£Όλ‘ μ¬μ©ν©λλ€. Windowsμ κ²½μ°, μμ μ΄ λ§λ νλ‘κ·Έλ¨μ μ€λ³΅ μ€ννκ² νκ³ μΆμ§ μμ΅λλ€. κ·Έλ¬κΈ° μν΄μλ νμ¬ Windowsμμ νλ‘μΈμ€μ μ 보λ₯Ό κ°μ Έμ λμ κ°μ μ΄λ¦μ νλ‘μΈμ€λ₯Ό κ°μ§κ³ μλ€λ©΄, νμ¬ νΈμΆν νλ‘κ·Έλ¨μ μ’ λ£νλ λ°©λ²μΌλ‘ ꡬνμ ν΄μΌν©λλ€.
λΉμ·νκ²λ, μ΄λ€ μ¨λΌμΈ κ²μμμ μ μ μ ν΅ μ€νμ λ°©μ§νκΈ° μν΄ μ΄λ€ νΉμ ν λλ²κ±°μ νλ‘κ·Έλ¨ μ€νμ λ°©μ§νκ±°λ νΉμ 보μ νλ‘κ·Έλ¨μ κ²½μ°, μ΄λ€ νλ‘μΈμ€λ₯Ό μ€ννλ©΄ κ·Έμ λ°νλ νλ‘μΈμ€λ₯Ό μ£½μ΄λ νλ‘κ·Έλ¨μ λ§μ΄ λ΄€μ κ²μ λλ€. μ΄ λν μμ κ°μ λ°©λ²μΌλ‘ ꡬνν΄μΌ ν©λλ€.
κ·Έλ¬κΈ° μν΄μ Windowsμλ Kernel Objectκ° μ‘΄μ¬νκ³ , μ΄λ₯Ό C Languageλ C++ Languageμ κ°μ κ³ κΈ νλ‘κ·Έλλ° μΈμ΄μμ μ¬μ©νκΈ° μν΄ HANDLE μ΄λΌλ ꡬ쑰체λ₯Ό μ¬μ©ν΄ μ΄ μ€λΈμ νΈμ μ κ·Όν μ μμ΅λλ€. κ·Έλ¦¬κ³ ν¨μλ₯Ό ν΅ν΄μ νλ‘κ·Έλ¨μμ μνλ Actionμ μ·¨ν μκ° μκ² μ£ .
λΉμ·νκ² μ½λλ‘ ν λ² κ΅¬νμ ν΄λ΄€μ΅λλ€. Windows kernelμμ μ 곡νλ System Call ν¨μμΈ Process32First ν¨μμ Process32Next ν¨μλ₯Ό μ¬μ©ν΄ νλ‘μΈμ€ λͺ©λ‘μμ κ° νλ‘μΈμ€λ₯Ό κ²μνκ³ , ν΄λΉνλ μ΄λ¦μ νλ‘μΈμ€λ₯Ό λ°κ²¬νλ©΄, Kill, κ·Έλ μ§ μμΌλ©΄ νλ‘μΈμ€κ° μ€ν μ€μ΄μ§ μμμ μ½μ νλ©΄μ νμνκ² νμμ΅λλ€.
μ΄μ²λΌ System Call ν¨μλ μ΄λ€ νλμ¨μ΄ μ₯μΉλ μ΄μ체μ μ λν Low-Level νλ‘κ·Έλλ° νΉμ§μ λͺ°λΌλ, 컀λμμ μ 곡νλ ν¨μλ§ μλ©΄, μ½κ² μ¬μ©ν μ μμ΄ κ΅μ₯ν νΈνκ² μ½λ©ν μ μλ μ₯μ μ κ°μ§κ³ μμ΅λλ€.
System Call vs Library Call
λμΆ© μμ€ν μ½ ν¨μμ λΌμ΄λΈλ¬λ¦¬ μ½ ν¨μμ λν΄ μ΄λ μ λλ μ΄ν΄νμ ¨μ κ²μ΄λΌ μκ°ν©λλ€. κ·Έλ¬λ©΄, μμ μ²λΌ μ΄μ체μ κ° κ°μ§κ³ μλ μ΄λ€ νΉμ ν μ 보λ₯Ό κ°μ§κ³ μΆμ λ System Call ν¨μλ₯Ό μ¬μ©νλ©΄ λ©λλ€.
κ·Έλ λ€λ©΄, νμΌκ³Ό κ°μ 리μμ€λ₯Ό κ°μ§κ³ μ½λ©μ νμμ λ, System Call ν¨μλ₯Ό μ¬μ©νλ κ²κ³Ό λΌμ΄λΈλ¬λ¦¬ ν¨μλ₯Ό μ¬μ©νλ κ²μ μ΄λ ν μ°¨μ΄μ μ΄ μμκΉμ?
μ¬μ€ νλ‘κ·Έλ¨ λ΄λΆμμ λ©λͺ¨λ¦¬λ₯Ό ν λΉνλ malloc ν¨μλ memset ν¨μλ λ΄λΆμμ System Call Functionμ μ¬μ©ν©λλ€. κ·Έλμ μ°¨μ΄λ‘ λ§μμ λ리μλ©΄ λ§μ μ°¨μ΄λ λμ§ μμ§λ§, μ€ν λ©΄μμ λ³Έλ€λ©΄, λΆλͺ ν μ°¨μ΄κ° μμ΅λλ€.
λ°λ‘ μ¬μ©μ λͺ¨λλ‘ μ€ννλ κ²κ³Ό 컀λ λͺ¨λλ‘ μ€ννλ κ²μΈλ°μ. λΌμ΄λΈλ¬λ¦¬λ μ¬μ©μ λͺ¨λ μ¦, νμΌμ μ‘΄μ¬νκ³ , System Call ν¨μλ 컀λμ μ‘΄μ¬νκΈ° λλ¬Έμ νλ‘κ·Έλ¨μ μ€ννλ λ° μμ΄ κ·Έ λͺ¨λκ° κ΅¬λΆλ©λλ€.
κ·Έλμ νλ‘μΈμλ System Call ν¨μλ₯Ό λ§λλ©΄, μ΄λ₯Ό 컀λ λͺ¨λλ‘ λ°κΎΈκ³ , 컀λ ν¨μλ₯Ό νΈμΆνκ² λ©λλ€. System Call ν¨μμΈμ§λ₯Ό ꡬλΆνκΈ° μν΄ EAX λ μ§μ€ν°(κ³ κΈ νλ‘κ·Έλλ° μΈμ΄λ‘ λ§νμλ©΄ return κ°)λ₯Ό μ¬μ©νκ² λ©λλ€.
μ°λ¦¬κ° νλ‘κ·Έλλ°ν λ μ²μμΌλ‘ μ¬μ©νλ ν¨μμΈ main ν¨μλ System Call ν¨μμ μνλ©°, System Call ν¨μλ return typeμ΄ intμ΄λ©°, μ€λ₯λ -1μ΄κ³ , μ μμ΄λ©΄ 0 νΉμ μμ μ μλ₯Ό λ°νν©λλ€. (νμ§λ§ exit ν¨μλ System Call functionμ΄ μλλλ€!)
λ νκ°μ§ μ°¨μ΄μ μ Library Call ν¨μμμ fopenμ΄λ, scanf λ±μ μ¬μ©ν λ, μ μ₯μλ‘ μ¬μ©νλ κ²μ΄ μμ£ . λ°λ‘ Bufferλ₯Ό μ¬μ©νλ€λ κ²μ λλ€.
νν μ°λ¦¬κ° charν λ°°μ΄μ μ¬μ©ν΄ λ¬Έμμ΄μ μ λ ₯λ°λ€κ° κ·Έ 곡κ°μ΄ λ¨μΌλ©΄, κ³μ μ λ ₯μ λ°λ μν©μ΄λ λμ΄μ°κΈ°λ₯Ό ν΄ λ¬Έμμ΄μ μ λ ₯ λ°μ κ²½μ°, λμ΄μ°κΈ° ν λ· λΆλΆμ μ§€λ €μ μΆλ ₯μ΄ λλ κ²½μ°λ₯Ό λ§μ΄ λ΄€μ κ²μ λλ€. νΉμ λ°°μ΄μ ν¬κΈ°λ³΄λ€ λ무 λ§μ λ¬Έμ μλ₯Ό μ λ ₯ν΄ κ·Έ μ λ ₯ν κ°―μλ₯Ό μ΄κ³Όνμ¬ λ€μ μ λ ₯ λ²νΌμλ μν₯μ λΌμΉλ κ²½μ°κ° μμμ£ . κ·Έλμ μ¬μ©νλ ν¨μλ€ μ€μλ fflush ν¨μλ₯Ό μΌλ κ²½μ°λ μμμ κ²μ λλ€.
κ·Έλμ C νμ€ ν¨μλ₯Ό νν Buffered I/O Functionμ΄λΌκ³ μ΄μΌκΈ°λ€μ λ§μ΄ ν©λλ€. λͺ¨λ λ²νΌλ₯Ό μ¬μ©νκΈ° λλ¬Έμ΄μ£ . μλ₯Ό λ€μ΄, scanf ν¨μλ₯Ό μ΄μ©ν΄μ λ¬Έμ νλμ© 1 byte μ© μ½λλ€κ³ κ°μ ν λ, μ»΄νμΌλ¬λ 컀λλ‘λΆν° C λΌμ΄λΈλ¬λ¦¬ λ΄λΆμ μΌλ‘ μ ν λ²νΌ ν¬κΈ°λ§νΌλ§ μ°μ μ½μ΄μ€κ³ , κ·Έλ¦¬κ³ λ€μλ² μ½μ΄μ¬ λλ λ²νΌμ μλ λ§νΌμ μκ° λ¨μλ€λ©΄ 컀λμμμ μμμ μ¬μ©νμ§ μκ³ , C λΌμ΄λΈλ¬λ¦¬μ μ‘΄μ¬νλ λ²νΌλ§ μ¬μ©νκΈ° λλ¬Έμ μμ€ν μ 리μμ€ λΆλ΄λμ μ€μ¬μ£ΌκΈ° λλ¬Έμ ν¨μ¨μ μ΄λΌκ³ λ³Ό μ μμ΅λλ€.
νμ§λ§ System Call ν¨μλ μ€μ μ»΄ν¨ν°μ 리μμ€λ₯Ό μ¬μ©νλ κ²μ΄κΈ° λλ¬Έμ λ°λ³΅μμ μ ν μλ‘ κ·Έλ§νΌ μμ€ν μ λ¬΄λ¦¬κ° κ°κ² λ©λλ€. νλ§λλ‘ μ΄λ° κ²μ΄κ² μ£ . μμ€ν μ½ ν¨μλ₯Ό νΈμΆνλ€κ° μ’ λ£νλ©΄ λ€μ 리μμ€λ₯Ό λ°λ©νκ³ , λ λΆλ₯΄λ©΄ λ λΆλ¬μ μΌλ€κ° λ€μ λ°λ©νκ³ , λμΆ© μ΄λ° μμ λλ€.
κ·Έλ¬λ―λ‘ κ°μ νμΌμ μ½μ΄μ¨λ€κ³ νλλΌλ, C νμ€ ν¨μλ₯Ό μ°λ κ²μ΄ λ€λ₯Έ νλ«νΌμ΄λ μ΄μ체μ μ νΈνμ±λ μ»΄ν¨ν° μμ μ¬μ©μ ν¨μ¨μ±λ κ·Έλ§νΌ λλ€λ κ²μ΄ μ¦λͺ μ΄ λ©λλ€. (λ¬Όλ‘ μν©μ λ°λΌμ λ€λ₯΄κΈ° λλ¬Έμ λ°λμ κ·Έλ λ€λ κ²μ μλλλ€.)
λ§μΉλ©°....
μ¬κΈ°κΉμ§ System Call ν¨μ, Library Call ν¨μμ λν΄μ μμλ΄€μ΅λλ€.
μλ§ νλ‘κ·Έλ¨μ κ°λ°νλ€λ³΄λ©΄, μ¬λ¬κ°μ§ λ°©λ²μ΄ μμΌμ ¨λ€λ κ²μ λ€λ€ μμλ μ΄μΌκΈ°μΌ κ²μ΄λΌ μκ°μ΄ λ©λλ€. νΉν μ΄μ Cλ C++ μΈμ΄λ₯Ό κ°μ§κ³ μμ€ν νλ‘κ·Έλλ°μ νλ€λ³΄λ©΄ μ¬λ¬ κ°μ§ κΈ°μ‘΄μ μΌλ νμ€ ν¨μμ λ³λ° μ°¨μ΄ μλ ν¨μλ€μ λ§μ΄ λ§λμ€ν λ°μ.
λμΆ© μΌν보면, κ·Έλ κ² μ΄λ €μ΄ κ°λ μ μλλλ€. (λ΄μ©μΌλ‘ κΈΈκ² μ°λ€λ³΄λ... μ‘°κΈ μ΄λ ΅κ² λκ»΄μ§ λΏμ΄μ§λ§.) μ½λ©μ νλ€λ³΄λ©΄, μ무λλ μμ μ΄ λ§λ νλ‘κ·Έλ¨μ΄ νλ«νΌ μ, μ΄μ체μ μμμ λμνλ μμ© νλ‘κ·Έλ¨μ΄κΈ° λλ¬Έμ, κ·Έλ€μ 리μμ€μ νΉμ§μ μ ꡬλ³ν΄μ μ½λ©μ νλ©΄, μ’μ νλ‘κ·Έλ¨μ΄ λμ¬κ±°λΌκ³ μκ°ν©λλ€.
'Programming > C++' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
CMakeλ₯Ό μ΄μ©ν C/C++ νλ‘μ νΈ λΉλ (0) | 2017.03.04 |
---|---|
chkmd5 (νμΌ MD5 ν΄μκ° κ°μ Έμ€λ νλ‘κ·Έλ¨, only Windows OS) (0) | 2017.01.26 |
GCC Stack Smashing Protector (0) | 2016.04.03 |
Boost thread Library (0) | 2013.08.12 |
Boost Random Number Generator Library (0) | 2013.04.12 |