no image
[System] Files in Unix/Linux
Types of files regular file : 텍스트 또는 이전 데이터 파일 directory : 파일의 목록을 저장한 파일 symbolic link file : 이미 존재하는 파일이나 디렉토리에 접근할 수 있는 새로운 이름 special file : 장치와 데이터를 주고 받는 통로(장치 번호를 inode에 저장) character device file : character 단위로 데이터 전송 block device file : block 단위로 데이터 전송 File organization file name(hard link) : 사용자가 파일에 접근할 때 사용 inode 파일에 대한 정보를 저장 번호를 통해 관리/접근 ls -i : inode번호 확인 data block : 실제 데이터가 저장된..
2024.01.24
no image
[System] High-Level File I/O
High-Level File I/O(Buffered I/O) C Standard library를 사용해서 파일 입출력 수행 File pointer 사용(ex. File* fp) 버퍼 단위로 디스크에 입출력 ※ 매 byte 마다 disk에 접근해서 write 하는 것은 비용이 큼 -> 메모리의 buffer에 데이터를 저장해서 한번에 disk에 접근 Physical disk address Sector(물리적 데이터 전송 단위)를 지정 Logical disk address Disk System의 데이터 전체를 block들의 나열로 취급 Block 번호 -> physical address 변환 모듈 필요 (disk driver) Disk address mapping OS(kernel) ----> Disk dri..
2024.01.24
no image
[System] Low-Level File I/O
Low-Level File I/O(System call) System call을 이용해서 파일 입출력 수행 File descriptor 사용 Byte 단위로 디스크에 입출력 특수 파일에 대한 입출력 가능 open #include #include #include int open(const char* pathname, int flags [, mode_t mode]); pathname (file path) : 열려는 파일의 경로 flags (file state flags) : 여는 방법(access mode) 설정 mode(file access permission) : 새로 생성(O_CREATE) 할 때만 유효 return : file descriptor File descriptor 열려 있는 파일을 구분하는..
2024.01.23
no image
[System] Thread
Thread 이전의 WaitForSingleObject를 이용하여 Event가 Set 되기를 기다린다면, Main Thread가 Wait 상태에 빠지게 되므로 다른 프로세스를 생성해 Set을 해주어야 함 WaitForSingleObject를 수행하는 새로운 Thread를 생성한다면, 하나의 프로세스에서 Event를 Wait하고 Set할 수 있게 됨 HANDLE m_hEvent = NULL; void createEvent() { CloseHandle(m_hEvent); m_hEvent = ::CreateEvent(NULL, TRUE, FALSE, L"TEST_EVENT"); if (m_hEvent == NULL) { if (GetLastError() == ERROR_ALREADY_EXISTS) { m_hE..
2024.01.04
no image
[System] Event
Event CreateEventA() 어떤 시점을 나타날 때 사용 WaitForSingleObject의 인자가 됨 Signaled(Set), Non-Signaled(Reset) 상태가 있음 한 Event를 다수의 Process가 지켜볼 때, 하나의 Process가 Triggered 되면 Auto Reset됨 -> 나머지 Process는 Auto Reset 때문에 Set을 수신하지 못하고 계속 기다리게 됨 -> 이를 ManualReset으로 변경하면 다른 Process도 Triggered 되게 할 수 있음 이름을 지정할 수 있는데 이미 있는 이름이라는 오류가 난다면 Create 하지 말고 Open으로 사용 HANDLE m_hEvent = NULL; void createEvent() { CloseHandle..
2024.01.03
no image
[System] WaitForSingleObject
WaitForSingleObject SingleObject가 시그널에 의해서 또는 타임아웃에 의해서 종될 때까지 기다림 Process의 종료 대기, Mutex 값 변화 감지, Event 객체 등에 사용하지만, 주로 Process 동기화에 사 여러 개를 기다리는 WaitForMultipleObjects도 있음 #include #include #include void main() { STARTUPINFO si; PROCESS_INFORMATION pi; ZeroMemory( &si, sizeof(si) ); si.cb = sizeof(si); ZeroMemory( &pi, sizeof(pi) ); TCHAR szBuffer[MAX_PATH + _MAX_FNAME] = {L"notepad.exe"}; // S..
2024.01.03
no image
[System] 윈도우 프로세스 생성
System Programming OS의 자체 기능을 추가 제작하는 프로그래밍 OS를 활용하는 프로그래밍 Process 생성 CreateProcessW(), CreateProcessA() W는 유니코드, A는 아스키코드 윈도우는 유니코드를 사용하기 때문에 CreateProcess()는 W를 의미 A도 결국 유니코드로 변환해서 사용 #include #include #include void main() { STARTUPINFO si; PROCESS_INFORMATION pi; ZeroMemory( &si, sizeof(si) ); si.cb = sizeof(si); ZeroMemory( &pi, sizeof(pi) ); TCHAR szBuffer[MAX_PATH + _MAX_FNAME] = {L"notepa..
2024.01.03