본문 바로가기

시스템프로그래밍

(22)
[시스템프로그래밍] 프로세스 생성과 실행 유닉스에서 프로세스는 사용자가 명령행에서 직접 프로그램을 실행해 생성하는 경우도 있지만, 프로그램 안에서 다른 프로그램을 실행해 생성하는 경우도 있습니다. 이렇게 프로그램에서 다른 프로그램을 실행해 새로운 프로세스를 생성할 때는 system, fork, vfork 함수를 사용합니다. 기능 함수원형 프로그램 실행 int system(const char *string); 프로세스 생성 pid_t fork(void); pid_t vfork(void); 유닉스 프로세스가 종료되면 해당 프로세스가 어떻게 종료되었는지를 나타내는 종료 상태를 저장합니다. 자식 프로세스는 부모 프로세스에 자신이 어떻게 종료되었는지를 알리는 종료 상태값을 리턴할 수 있습니다. 일반적으로 종료 상태값이 0이면 정상적으로 종료했음을 의미합..
[시스템프로그래밍] 프로세스 정보 이번 절의 목표는 유닉스 시스템에서 프로세스가 무엇인지 이해하고, 함수를 사용해 프로세스의 속성을 검색하며, 프로세스 실행 시간 측정 및 환경 변수를 설정하고 사용할 수 있게 되는 것입니다. 개요프로세스는 현재 실행 중인 프로그램을 의미합니다. 유닉스 시스템에서는 동시에 여러 프로세스가 실행됩니다. 프로세스는 계속 실행상태에 있지는 않으며, 실행에서 수면, 실행 대기 등 규칙에 따라 여러 상태로 변합니다. 현재 유닉스 시스템에서 실행 중인 프로세스를 확인하려면 ps, prstat, sdtprocess 명령을 사용합니다. 시스템에서는 프로세스를 식별하는 데 프로세스 ID(PID, Process ID)를 사용합니다. 관련 프로세스들이 모여 프로세스 그룹(Process group)을 구성합니다. 세션(sess..
[시스템프로그래밍] 시스템 정보 유닉스 시스템과 관련된 기본 정보와 사용자 정보 검색, 시스템의 시간을 관리하는 함수를 다룹니다. 유닉스 시스템의 기본 환경 정보를 검색할 수 있는 함수들은 기본 환경과 관련된 구조체나 상수를 사용해 정보를 검색합니다. 주요 대상 정보는 하드웨어와 운영체제의 종류 관련 정보와 메모리 페이지의 크기나 최대 패스워드 길이 등 시스템 환경 설정에 관한 정보입니다. 아래 표에서 시스템 정보 검색 관련 함수를 소개합니다. 이중 sysinfo 함수를 사용하면 정보 검색 뿐만 아니라 호스트명 같은 일부 환경 정보를 설정할 수도 있습니다. sysconf 함수를 사용하면 시스템 자원 관련 정보를 검색할 수 있고, pathconf와 fpathconf 함수를 사용하면 파일과 디렉토리 관련 자원 정보를 검색할 수 있습니다. ..
[시스템프로그래밍] Segmentation Fault Segmentation Fault는 컴퓨터 소프트웨어의 실행 중에 일어날 수 있는 특수한 오류입니다. 세그멘테이션 위반, 세그멘테이션 실패 라고도 하며, 세그폴트(Segfault)로 줄여서 쓰기도 합니다. Segmentation Fault는 프로그램이 허용되지 않은 메모리 영역에 접근을 시도하거나, 허용되지 않은 방법으로 메모리 영역에 접근을 시도할 경우 발생합니다. (예를 들어, 읽기 전용 영역에 어떤 내용을 쓰려고 시도하거나, 운영 체제에서 사용하는 영역에 다른 내용을 덮어쓰려 하는 경우) 모토로라 68000 등의 프로세서 기반 시스템들은 이러한 오류를 주소나 버스 오류로 취급하는 경향이 있습니다. 세그멘테이션은 운영 체제에서 사용하는 메모리 관리 및 보호의 한 기법입니다. 이것은 페이징으로 대부분 ..
[시스템프로그래밍] 고수준 파일 입출력 고수준 파일 입출력은 표준 입출력 라이브러리라고도 하며, C 언어의 표준함수로 제공됩니다. 저수준 파일 입출력은 바이트 단위로만 입출력을 수행하므로, 읽어들인 데이터를 가공하는 추가적인 작업이 필요합니다. 이와달리 고수준 파일 입출력은 문자 단위, 행 단위, 버퍼 단위, 형식 기반 입출력 등 편리한 기능을 제공하므로, 프로그램의 용도에 맞게 적당한 함수를 선택하면 됩니다. 파일 포인터저수준 파일 입출력에서는 열린 파일을 가리키는 데 파일 기술자를 사용하는 한편, 고수준 파일 입출력에서는 파일 포인터를 사용합니다. 파일 포인터는 디스크에서 메모리로 읽어온 파일의 위치(주소)에 관한 정보를 담고 있는 포인터입니다. 또한 파일 기술자는 정수형이지만, 파일 포인터는 시스템 헤더 파일에 정의되어 있는 FILE *..