Linux
[프로세스 관리] 0. 프로그램 / 프로세스 / 스레드
먼저 프로세스 관리에 대한 시스템 프로그래밍에 대해 알아보기 전에 프로세스에 대해 간단하게 알아 봅시다. 실제로 프로세스와 스레드 등은 리눅스 커널 분석에서 한번 알아보도록 자세히 알아보구요, 여기선 간단히 ^^ 프로세스는 기본적으로 현재 실행중인 프로그램! 살아있는 프로그램! 을 말합니다. 그 말인 즉슨, 여러분들이 프로그램을 사용하고 싶을 때 더블 클릭이던, 엔터로 실행을 하던그 프로그램이 동작하기 위해 창이 열리고 Memory, Hardware(음악 프로그램이라면 스피커가 되겠죠?)등의 컴퓨터 자원(Resource)를 할당 받아 실행되고 있는 프로그램입니다. 기본적인 프로그램 들은 바이너리 형태로 디스크 같은 저장장치에 기록되어 있습니다. 언제든지 실행하면 컴파일되어 기록되어 있는 코드들이 수행되고..
[파일입출력] 6. 파일 안의 데이터 잘라내기
파일입출력을 사용함녀 파일을 열고 읽고 쓰며, 오프셋을 변화시키며 작업을 하게 됩니다.이때 원하는 파일을 잘라내고 싶을 때가 있습니다. 그 때 사용하는 시스템 콜을 알아보겠습니다. 리눅스에서 특정한 파일을 잘라내기 위한 시스템 콜이 있습니다. 총 2가지인데요,그 주인공은 truncate() 시스템 콜과 ftruncate() 시스템 콜입니다. 두 시스템의 공통점은 특정 파일의 데이터를 잘라 낸다는데 있습니다. 그럼 차이점이 뭘까요?truncate()시스템 콜은 파일의 경로를 이용해서, ftuncate() 시스템 콜은 파일 디스크립터를이용해서 파일의 데이터를 잘라 낸다는 것입니다. 두 함수를 한번 알아보겠습니다.먼저, ftruncate() 시스템 콜입니다. #include #include int ftrunc..
[파일입출력] 5. lseek()으로 파일 탐색하기
파일을 열어 이젠 원하는 위치로 자연스럽게 파일의 위치(?), 커서(?)를 lseek() 시스템 콜을 이용하여 이동해보겠습니다. 시스템 프로그래밍을 하다보면 어떤 경우 파일의 내가 원하는 위치로 커서를 이동시키고 싶은 경우가 있습니다. 그럴 때 자주 사용되는데요, lseek()이란 시스템 콜을 이용하면 된답니다. #include #include off_t lseek (int fd, off_t pos, int origin) 입력 인자 int fdopen() 시스템 콜로 열린 파일을 가리키는 파일 지정 번호 off_t pos 파일에 이동할 위치 지정 originlseek() 시스템 콜에 인자(아래 표 참고) 반환값 off_t파일 쓰기 성공 : 파일의 새로운 오프셋 파일 쓰기 실패 : -1 위의 내용을 보면 ..
[LinuxCommand] chmod
chmod 명령어는 파일의 접근 권한을 변경하기 위해 사용된다.문법은 아래와 같다. chmod ugo+rwx filename 위의 표현은 아래와 같습니다. u User : 사용자 g Group : 파일 사용 그룹 o Others : 사용자와 그룹 외 모든 계정 + 권한 추가 - 권한 제거 = 현재 권한에 덮어씌우기 r 읽기 권한 w 쓰기 권한 x 실행 권한 위의 내용을 토대로 예를 들어보면, chmod u+r file file을 사용자가 읽게 할 수 있도록 권한을 추가한다. chmod go-x file file을 그룹과 그 외 계정에서 실행하지 못하도록 실행 권한을 제거 한다. chmod ugo=rxw User, Group, Others 모두에게 파일을 읽고 쓰기 실행할 수 있는 권한을 부여한다. 그 외..
[파일입출력] 4. 동기식 입출력
입출력을 동기화하는 것은 분명 중요합니다. 하지만, 그 문제를 너무 확대 해석하고 크게 신경 쓸 필요는 없습니다. 요즘의 운영체제들은 버퍼를 통한 지연된 쓰기 작업을 구현하고 있습니다. 그렇기에 앞에 write() 시스템 콜 이용 시 주의해야 될 사항들을 그렇게 신경쓰지 않으셔도 됩니다. 하지만, 개발을 하다보면 개발자가 직접 데이터가 디스크에 기록되는 시점을 제어하고 싶을 때가 있습니다. 이런 상황에 맞춘 몇몇의 시스템 콜을 확인해 보겠습니다. 1. fsync() 시스템 콜과 fdatasync() 시스템 콜 첫 번째는 fsync() 시스템 콜과 fdatasync() 시스템 콜입니다. 먼저, fsync() 시스템 콜에 대해 알아보겠습니다. #include int fsync (int fd) 입력인자 int..
[파일입출력] 3. write()로 파일에 쓰기
지난번에 read() 리눅스 시스템 콜을 이용하여 파일에 데이터를 써보았다면, 이번에는 리눅스 시스템 콜 중 write()를 이용하여 파일에 데이터를 써보도록 하겠습니다. write()는 보자마자 아시듯이 read()의 반대 개념입니다. read()와 동일하게 파일디스크립터를 이용하여 참조한 파일에 데이터를 씁니다. 먼저, write() 시스템 콜의 원형과 인자를 확인해 봅시다. #include ssize_t write (int fd, void *buf, size_t len) 입력 인자 int fd open() 시스템 콜로 열린 파일을 가리키는 파일 지정 번호 void* buf 파일에 쓸 데이터를 저장하고 있는 메모리 공간 len 파일에 쓸 데이터의 길이 반환값 ssize_t 파일 쓰기 성공 : writ..