FILE HIGH-LEVEL I/O에 대해 알아보자

File: High-level I/O I/O Stream Stream: 물줄기, 개울, 시내 I/O stream: 데이터가 흘러가는 것. 데이터의 이동을 표현하는 말 예) Media streaming Source 에서 Destination 으로 데이터가 이동함 프로그램은 데이터가 이동하는 통로로, source 이자 destination 일 수 있음 Input stream: Source로부터 데이터가 들어오는 경로

FILE LOW-LEVEL I/O에 대해 알아보자

File: Low-level I/O File Volatile and Non-volatile storage devices Primary storage: Main memory 주기억장치로 사용하는 DRAM 등의 휘발성 저장 장치 성능이 높지만, 적은 저장 공간 제공 프로그램 내의 변수와 같이 용량은 적지만 자주 접근하는 자료를 저장 Secondary storage: Storage devices 보조기억장치로 사용하는 HDD, SSD 등은 비휘발성 저장 장치 느리지만, 많은 저장 공간을 제공 시스템 종료 시에도 보관하여야 할 데이터를 적재하고, 시스템 재기동 시 다시 로드 일반적으로 파일(file)의 형태로 데이터를 저장함 파일과 파일 속성 파일: 보조기억장치의 정보저장 단위로 자료의 집합 Collection of data 0부터 시작하는 주소 공간에 1B 단위로 데이터를 저장하고, 접근할 수 있음 파일의 속성 (attribute) 파일은 Data 와 Metadata 로 구성됨 Data: 사용자가 저장하고자 하는 데이터 Metadata: 데이터의 속성이나 특징 등, 저장된 데이터를 설명하기 위한 추가적인 데이터 Metadata 를 주로 file attribute 라고 지칭함 대표적인 Metadata Name, Size, Creation time, Last modified time, Last access time, access control 추가적인 Metadata 사진: 찍은 날짜, 위치, 포함된 사람들 등등 영화: Runtime, 제목, 첫 상영 날짜, 출연 배우 등등 보다 다양한 정보가 요구됨에 따라 파일의 metadata 저장 방식도 발전하고 있음 File Operations 파일에 대해 수행할 수 있는, OS가 제공하는 기본 동작 Basic: open, close, read, write 파일을 사용하기 위해서는 우선 열어야 하고, (open) 사용을 완료한 후에는 닫아야 한다. (close) 이외의 데이터 접근 방법은 없음! Insert? Modification? 모두 Read and Write 로 구현하여야 함 Control Seek: 파일의 현재 위치 설정 Truncate: 파일의 내용 삭제 Delete (or remove, unlink, release): 파일 삭제 Flush (or sync): 파일의 내용을 즉각 저장 장치에 기록 기타: mmap, poll, lock 등 공유 및 동기화를 위한 제어 방법들 Low- & High-level File I/O (Input and Output) Low-level File I/O 파일을 다루기 위해 OS에서 제공하는 시스템콜들을 직접 사용 특수한 파일 (장치 파일 등)을 제어할 때 주로 사용함 Open(), close(), read(), write(), lseek() 등 High-level File I/O C 라이브러리 등에서 제공하는 보다 편리한 파일 입출력 서비스 Low-level file I/O 는 시스템콜 그 자체라면, High-level 은 시스템콜을 다양한 형태로 가공하여 편의성을 높인 것 예) fprintf() : 파일에 바로 원하는 형태의 문자열을 출력할 수 있음 Low-level 에서는 우선 문자열을 원하는 형태로 가공한 후, write()를 사용해 문자열의 길이 등을 함께 전달하여 기록해야 함 fopen(), fclose() 등, 이름이 유사하나 앞에 f 가 붙는 경우가 많음 라이브러리 내에서 성능 등의 이유로 버퍼를 이용하므로, 버퍼 기반 입출력 이라고 부르기도 함 Low-level File I/O 파일 기술자 파일 기술자 현재 프로세스를 통해 열려 있는 파일을 구분하는 정수값. OS가 해당 프로세스의 열린 파일들을 관리하기 위해 사용하는 테이블의 Index 저수준 파일 입출력에서 열린 파일을 참조하는데 사용 기본으로 지정된 파일 기술자들 0번 : 표준 입력, 1번 : 표준 출력, 2번 : 표준 오류

SYSTEM CALL에 대해 알아보자

System Call 시스템 프로그래밍 System Call: OS가 제공하는 기능들을 사용하는 것 하드웨어를 제어하거나, 다른 프로세스와의 통신을 수행하거나, 시스템 정보에 접근, 수정하거나, 시스템을 제어하는 기능 등 대표적인 시스템 콜 화면 출력: printf() <- C 라이브러리. 내부에서 write() system call 사용 파일 제어: open(), close(), read(), write() 동적 메모리 할당: malloc() <- C 라이브러리. 내부에서 brk(), mmap() 사용 네트워크 통신: socket(), send(), receive() System Call vs. Library function 시스템 호출 OS Kernel이 제공하는 서비스를 이용해 프로그램을 작성할 수 있도록 제공되는 프로그래밍 인터페이스 기본적인 형태는 C 언어의 함수 형태로 제공 리턴값 = 시스템호출명(인자, …); C Library 가 이러한 형태로 편리하게 이용할 수 있게 제공해주는 것 라이브러리 함수 라이브러리 : 미리 컴파일된 함수들을 묶어서 제공하는 특수한 형태의 파일 /lib, /usr/lib에 위치하며 lib*.a 또는 lib*.so (static object) 형태로 제공 자주 사용하는 기능을 독립적으로 분리하여 구현해둠으로써 프로그램의 개발과 디버깅을 쉽게하고 컴파일을 좀 더 빠르게 할 수 있다 OS 커널과 무관하게 단순한 C 코드를 수행 예) strcpy() : 문자열 복사를 위한 연산을 수행. 편의를 위한 라이브러리 함수 두 가지 시스템 콜 호출 방법 직접 시스템콜 호출: 본래 시스템콜은 특수한 방식(trap)을 통해 호출하여야 함 이유1: 시스템콜의 코드가 일반 사용자가 접근할 수 없는 OS 커널 영역에 존재하기 때문 이유2: 시스템콜은 다수 존재하고, 번호로 구분하기 때문에 직관적이지 않음 굳이 하려면? : syscall() 함수 이용 라이브러리 함수 사용 C 라이브러리는 시스템콜을 간편히 사용할 수 있게 도와주는 여러 함수 제공 예) printf() : 화면 출력을 위해서는 본래 write() 시스템 콜을 사용해야 함 일반적으로 거의 모든 경우에 라이브러리 함수를 통해 시스템콜을 이용함

리눅스 내에서 C 프로그래밍에 대해 알아보자

C Programming on Linux Vi 라인 복사 및 삭제 모든 명령어는 insert mode 에서 esc 키를 눌러 일반 모드로 나온 후, 수행 라인 복사 명령 : yy 앞에 숫자를 입력하면, 현재 커서가 위치한 라인을 포함한 아래의 다수 라인을 한번에 “레지스터”로 복사함 라인 삭제 명령 : dd 앞에 숫자를 입력하면, 현재 커서가 위치한 라인을 포함한 아래의 다수 라인을 한번에 “레지스터” 로 복사하고, 제거함 레지스터의 붙여넣기 : p 현재 커서가 있는 곳에서부터 레지스터의 내용을 삽입함 VI Register VI에서 복사한 내용이 임시로 보관되는 공간. VI 프로그램 간에 공유됨. 따라서 VI가 종료되어도, 다시 VI를 수행하면 레지스터의 내용을 이용할 수 있음 이 기능은 한 파일의 내용을 복사해서 다른 파일에 붙여넣을 때 유용함 라인 이동 및 관련 명령 라인 이동 사용법 1: “:” 입력 후, 이동할 라인 숫자 입력 사용법 2: 라인 숫자를 입력하고 Shift + g 관련 명령 라인의 맨 앞으로 이동하기: 0 (숫자 영) 맨 위로 이동하기: gg 맨 밑으로 이동하기: “:$” or “(입력없이) shift + g” 줄 번호 표시 하기 : “: set number” 문자열 찾기 / 바꾸기 문자열 찾기 “/”를 입력하고 찾을 문자열 입력 Enter 입력 후, 다음 단어, 이전 단어 검색 소문자 n: 다음 단어 대문자 N: 이전 단어 이전에 찾아본 문자열 불러오기 “/”를 입력한 상태에서 위 아래 화살표 사용 문자열 바꾸기 :[범위]s/찾을문자열/바꿀문자열/[option] 범위: comma 를 이용해 범위 표현. % 는 전체 영역 예) 1,10: 첫 번째부터 10번째 라인 내에서 수행. 찾을 문자열에는 정규 표현식 사용 가능 (regular expression 으로 검색) Options g: 범위 내에서 바꾸기 수행 c: 한 항목씩 물어보면서 수행 i: 대소문자 무시 예) :%s/Protocol/protocol/gc 기타 Undo/Redo (취소하기, 되돌리기) u: undo ^r: Redo (CTRL + r) 세로 및 가로 블록 선택, 편집 ^v: Visual block mode (CTRL + v) 모드 진입 후, 화살표로 선택 후, 편집 명령 예) 여러 라인에 있는 주석을 한번에 제거 세로 모드로 여러 주석 문자를 선택 후 delete 예) 여러 라인에 주석 한번에 넣기 세로 모드로 영역 선택 후, shift + i 로 입력 모드 진입 텍스트 입력 후, esc 를 두 번 누름 Read-only 파일의 저장 :w 혹은 :wq 뒤에 ! 를 붙임 (force) 외부 텍스트 붙여넣기 모드 :set paste nano nano - Nano’s ANOther editor, inspired by Pico 전통적으로 메일 클라이언트에서 사용하던 Pico 라는 편집기를 기반으로, Vi와 같이 여러 리눅스 배포판에서 기본 프로그램으로 사용함 Vi와 비교: “사용하기 쉽다.” 대부분 단축키가 아래에 나열되어 있어 모르는 기능도 빠르게 활용할 수 있다. “검색하여 교체하기” (replace) 기능이 보다 편리하게 사용 가능 하다. 자동 들여쓰기 기능이 더 편리하다. Comments Vi, nano 모두 기본 에디터이므로 간단한 사용 방법은 익혀두는 것이 좋다. Vi, nano 모두 간단한 편집 기능은 큰 차이 없으므로, 익숙한 도구를 쓰면 된다. 초심자가 처음 배운다면? Nano: 접근성이 높다 Vi: 처음 배울 때 어려울 수 있지만, 보다 다양하고 강력한 기능들을 제공한다. (!) 결국 다양하고 많은 편집을 필요로 할 때는 윈도우 환경이 훨씬 편리함. 실제 파일은 리눅스에, 편집은 윈도우(or Mac)에서 수행하는 환경을 구축하는 것이 일반적 GCC: GNU Compiler Collection GNU

LINUX 유틸리티에 대해 알아보자

유틸리티 찾기 find find 디렉토리 [-옵션] : 옵션의 검색 조건에 따라 지정된 디렉터리 아래에서 해당되는 파일들을 모두 찾아 출력한다.

PROCESS와 REDIRECTION에 대해 알아보자

Process and Redirection Process 프로세스는 실행중인 프로그램이며, 각 프로세스는 유일한 프로세스 번호 PID를 갖게 된다. 또, 각 프로세스는 부모 프로세스에 의해 생성된다.

LINUX PERMISSION에 대해 알아보자

관리 권한 및 접근 권한 시스템 관리자 시스템 관리자의 역할 사용자, 그룹 등록 및 삭제 소프트웨어 설치, 업그레이드, 삭제 하드웨어 추가 설치 시스템 보안 데이터 백업 Windows의 관리자 계정 : Administrator Unix의 관리자 계정 : Super user 다른 말로 Privileged user or account <-> non-privieged

LINUX DIRECTORY에 대해 알아보자

디렉토리와 파일 디렉토리 리눅스의 디렉토리는 계층구조로, 루트로부터 시작하여 트리 형태의 계층구조를 이룬다.