본문내용
않는다.
fork() 시스템 콜이 성공적으로 수행되면 그 순간에 하나의 프로세스가 두 개의 프로세스로 되는데 두 프로세스는 수행할 일을 구분하기 위하여 두 프로세스의 fork() 리턴문이 서로 다르다는 것을 이용한다
부모 프로세스에게는 fork()의 리턴값으로 새로 만들어진 자식 프로세서의 PID가 리턴되며, 자식 프로세스에게는 fork()의 리턴값이 0이 된다.
한편 fork() 문이 실패한 경우 부모 프로세스에서는 -1을 리턴하고, 자식 프로세스는 생성되지 않는다.
PID가 135인 어떤 프로세스가 fork()를 수행하여 자식 프로세스를 만드는 그림
예를들어 아래와 같은 프로그램 코드를 수행하면 fork() 문을 만나는 순간에 두 개의 프로세스가 생성되는데 그 중 자식 프로세스는 fork()의 리턴값이 0이 되므로 child_ work()를 수행하고, 부모 프로세스에서는 fork()의 리턴값이 자식 프로세스의 PID 값(즉 0이 아님)이 되므로 parent_work()를 수행하게 된다.
다음은 fork()의 사용 예로 부모와 자식 프로세스가 같은 이름의 변수를 각각 증가시키고 그 결과를 확인해 보는 예제 프로그램 fork_test.c를 살펴보자
자식 프로세스는 두 개의 변수 global_var과 local_var를 각각 1씩 증가시키며, 부모 프로세서는 2초 후에 이 두 변수를 각각 5씩 증가시킨다
이 프로그램 실행 결과는 다음과 같다.
read()
read는 화일로부터 임의 길이의 문자나 바이트를 호출 프로그램의 버퍼로 읽어들이기 위해 사용된
다. 이때 버퍼는 문자형의 배열로 정의되어야 한다.
read("파일“, 어디다가, 얼마만큼 );
write()
write 시스템 호출은 read의 정반대이다. 즉, 이 호출은 프로그램 버퍼에 있는 문자 배열 자료를 외부 화일에 기록한다
#include
ssize_t write(int fd, const void *buf, size_t count);
read()에 의해 버퍼에 있는 내용을 write는 buf로 시작하는 버퍼에서 파일 기술자 fd로 참조되는 파일에 count 바이트까지를 쓴다. 이것은 실제로 기록된(저장된) 바이트 수를 반환한다. 이 값은 파일 기술자에 에러가 있었거나, 또는 기반이 되니는 디바이스 드라이버의 블록 크릭에 따라 nbytes 보다 적을 수 있다. 함수가 0 을 반환하면 어떤 데이터가 기록된지 않았음을 의미하고 , -1 이면 write 호출에 에러가 있었음을 의미한다. 에러는 errno 전역 변수에 지정될 것이다
프로그램은 단순히 표준 출력에 메시지를 출력한다. 프로그램이 끝날때 열려 있던 파일 기술자는 모두 자동으로 닫히므로 이것을 직접 닫을 필요가 없다. 그러나 버퍼형 출력을 다룰 때에는 이렇게 자동으로 닫히지 않을 것이다
실행결과
close()
파일 닫기
#include
int _close(int handle);
int close(int handle);
close는 handle과 연결되어 있는 파일을 닫는다.
사용예
실행결과
fork() 시스템 콜이 성공적으로 수행되면 그 순간에 하나의 프로세스가 두 개의 프로세스로 되는데 두 프로세스는 수행할 일을 구분하기 위하여 두 프로세스의 fork() 리턴문이 서로 다르다는 것을 이용한다
부모 프로세스에게는 fork()의 리턴값으로 새로 만들어진 자식 프로세서의 PID가 리턴되며, 자식 프로세스에게는 fork()의 리턴값이 0이 된다.
한편 fork() 문이 실패한 경우 부모 프로세스에서는 -1을 리턴하고, 자식 프로세스는 생성되지 않는다.
PID가 135인 어떤 프로세스가 fork()를 수행하여 자식 프로세스를 만드는 그림
예를들어 아래와 같은 프로그램 코드를 수행하면 fork() 문을 만나는 순간에 두 개의 프로세스가 생성되는데 그 중 자식 프로세스는 fork()의 리턴값이 0이 되므로 child_ work()를 수행하고, 부모 프로세스에서는 fork()의 리턴값이 자식 프로세스의 PID 값(즉 0이 아님)이 되므로 parent_work()를 수행하게 된다.
다음은 fork()의 사용 예로 부모와 자식 프로세스가 같은 이름의 변수를 각각 증가시키고 그 결과를 확인해 보는 예제 프로그램 fork_test.c를 살펴보자
자식 프로세스는 두 개의 변수 global_var과 local_var를 각각 1씩 증가시키며, 부모 프로세서는 2초 후에 이 두 변수를 각각 5씩 증가시킨다
이 프로그램 실행 결과는 다음과 같다.
read()
read는 화일로부터 임의 길이의 문자나 바이트를 호출 프로그램의 버퍼로 읽어들이기 위해 사용된
다. 이때 버퍼는 문자형의 배열로 정의되어야 한다.
read("파일“, 어디다가, 얼마만큼 );
write()
write 시스템 호출은 read의 정반대이다. 즉, 이 호출은 프로그램 버퍼에 있는 문자 배열 자료를 외부 화일에 기록한다
#include
ssize_t write(int fd, const void *buf, size_t count);
read()에 의해 버퍼에 있는 내용을 write는 buf로 시작하는 버퍼에서 파일 기술자 fd로 참조되는 파일에 count 바이트까지를 쓴다. 이것은 실제로 기록된(저장된) 바이트 수를 반환한다. 이 값은 파일 기술자에 에러가 있었거나, 또는 기반이 되니는 디바이스 드라이버의 블록 크릭에 따라 nbytes 보다 적을 수 있다. 함수가 0 을 반환하면 어떤 데이터가 기록된지 않았음을 의미하고 , -1 이면 write 호출에 에러가 있었음을 의미한다. 에러는 errno 전역 변수에 지정될 것이다
프로그램은 단순히 표준 출력에 메시지를 출력한다. 프로그램이 끝날때 열려 있던 파일 기술자는 모두 자동으로 닫히므로 이것을 직접 닫을 필요가 없다. 그러나 버퍼형 출력을 다룰 때에는 이렇게 자동으로 닫히지 않을 것이다
실행결과
close()
파일 닫기
#include
int _close(int handle);
int close(int handle);
close는 handle과 연결되어 있는 파일을 닫는다.
사용예
실행결과
키워드
추천자료
- 생산시스템(생산시스템 정의, 생산시스템 발달, 생산시스템 계획,예측), 생산시스템과 MRP(MR...
- 교육행정정보시스템(NEIS)의 개념, 배경, 교육행정정보시스템(NEIS)목표, 필요성과 교육행정...
- 지리정보시스템(GIS) 개념, 지리정보시스템(GIS) 특징, 지리정보시스템(GIS) 기능, 지리정보...
- 교육행정정보시스템(NEIS) 추진배경, 교육행정정보시스템(NEIS) 목표, 교육행정정보시스템(NE...
- 지식관리시스템(KMS, 지식경영)의 의미와 특성, 지식관리시스템(KMS, 지식경영)의 구성요소와...
- 학교종합정보관리시스템(CS)의 개발배경, 학교종합정보관리시스템(CS)의 필요성, 학교종합정...
- 국가지리정보시스템(NGIS)의 개념과 배경, 국가지리정보시스템(NGIS)의 계획, 국가지리정보시...
- 생산시스템 자동화의 의미, 생산시스템 자동화의 형태, 생산시스템 자동화의 차원별 성향, 생...
- [생산시스템][생산][생산시스템 유형][생산시스템 관리][생산시스템 설비][생산시스템 배치][...
- [인재평가시스템][인재평가][인재][평가시스템][인재평가시스템 평가유형][인재평가시스템 요...
- [지급결제시스템 감시][지급결제시스템][감시][결제시스템][지급][결제][정책]지급결제시스템...
- [린생산시스템][린생산방식][린생산][생산]린생산시스템(린생산방식)의 등장, 린생산시스템(...
- 생산시스템 자동화의 개념, 생산시스템 자동화의 성격, 생산시스템 자동화의 배경, 생산시스...
- 경영정보시스템 (거래처리시스템(TPS), 경영정보시스템(MIS), 지식관리시스템(KMS), 각 시스...