본문 바로가기

소프트웨어개발19

Process 프로세스 Process 란 프로세스는 시스템의 자원들의 할당을 위한 기본적인 단위이다. 각 프로세스는 자신만의 주소공간과 (보통) 한 개의 제어 쓰레드를 갖는다. 프로세스는 프로그램을 실행한다; 당신은 같은 프로그램을 실행하는데 여러개의 프로세스를 가질 수 있지만, 각각의 프로세스는 자신의 주소공간에서 자신의 프로그램 복제본을 갖고 다른 프로그램 복사본과 독립적으로 실행된다. 프로세스들은 계층적으로 구성된다. 각 프로세스는 그것을 만들었던 부모 프로세스를 갖는다. 주어진 부모 프로세스에 의해 만들어진 프로세스는 자식 프로세스라고 불린다. 자식 프로세스는 부모 프로세스로 부터 그 속성의 대부분을 상속받는다. 여기서는 프로그램에서 어떤 자식 프로세스를 만들고, 종료하고, 제어하는지에 대해서 설명한다.실제로, 새로운 .. 2024. 2. 6.
C 언어 cat 명령구현 C "cat" 명령을 구현해 보자. bool catFile(const char* file, char* buf){FILE* fp; if ((fp = fopen(file, "r")) == NULL){ERROR("%s file open fail\n", file);return false;}if (fscanf(fp, "%s", buf))fclose(fp);return true;} 2020. 12. 16.
Java Daemon 백그라운드 프로세스 구현 Daemon Process Daemon 이란 백그라운드로 실행되면서, 사용자의 인터페이스(tty)가 없는 프로그램을 말한다. 주기적인 서비스 요청을 처리하기 위해서 커널상에 백그라운드 모드로 실행되는 프로세스이다. 우리가 흔히 사용하는 리눅스 서비스들은 대부분 데몬으로 동작하며, -d로 끝나는 프로세스 바이너리(예: sshd, syslogd)들이 모두 해당된다. 리눅스 명령인 nohup으로 백그라운드 구동은 가능하지만, kill 명령으로 종료해야 한다. 따라서 비정상 종료시의 처리를 하려면, OS로부터 signal을 받아야 하므로 데몬으로 구동시켜야 한다. 단독데몬 항상 백그라운드 모드로 실행되고 메모리를 상대적으로 많이 소비한다. 서비스(응답속도)가 빠르다. httpd와 같은 웹서비스 데몬이 대표적. .. 2020. 10. 23.
C 데몬프로세스 만들기 백그라운드 데몬프로세스 구현 C 코드 서버 프로그램은, 대개 백그라운도로 동작하며, 이를 위해 백그라운드 Daemonize 기능을 구현해야 한다. 여러가지 방식이 있지만, 대강 구현 방식은 이렇다. 1. 총 2회의 fork()를 수행한다. main 함수가 호출되는 초기에 첫 fork() 수행하여, parent process 는 exit() 함과 동시에, Child Process 에게 session 권한을 부여한다. session 권한으로 주인이 된 child Process 는 두번째 fork()를 수행하고, Parent process 는 exit() 하고, 무한 loop 작업을 Child Process 에게 맡긴다. 마지막 Child Process 가 데몬의 주인이 된다. 2. 시그널 차단 작업 백그라운.. 2020. 10. 16.
opensource VoIP,IP-PBX : asterisk 오픈소스기반 VoIP 기반 콜센터 구축 IP/PBX 오픈소스 asterisk 를 활용해보자 패키지 소스코드 http://downloads.asterisk.org/pub/telephony/asterisk/ **간단 한글참고 자료 : cafe.naver.com/synologynas/25598 Asterisk IP-PBX 인터넷전화 사용기(간략) 어찌하다가 Asterisk 라는 단어를 접하고 주말내내 씨름하다가 지금까지 알게된 내용을 공유차원에서 적어봅니다.1. Asterisk란 무엇인가?요점만 말해서 인터넷을 통해 ... cafe.naver.com 2020. 6. 2.
C, File I/O, open(), fopen() 그리고 dup() 모든 프로그래밍 언어에서 빠지지 않는 영역이 있다면, 그것은 바로 I/O 가 아닐까 한다. 예외상황도 많고, 알 수 없는 에러가 I/O 영역에서 가장 많이 발생한다. 시스템 성능차원에서도, I/O 로 인한 부하 무시못한다. C 언어 에서 파일을 열고, 닫을때, 필수적으로 함수가 open()/close(), fopen()/fclose() 이다. 파일을 open() 함수를 사용하여 얻어낸 정수 값을 "파일 디스크립터"라고 한다면, fopen()으로 구한 FILE * 포인터로 얻어낸 포인터 값을 "파일 스트림 포인터"라고 할수 있다. 파일 디스크립터와 파일 스트림포인터. 어차피 파일을 다루기 위한 정보이지만, 주로 파일 I/O 에서는 Socket I/O 의 fd 처럼, 스트림(*포인터형) 보다는 디스크립터(숫.. 2020. 3. 30.
select,epoll,poll 논리적으로는 select 는 느리고, epoll 은 빠르다고 하는데, 내가 실무에서 실제로 구현해보니, 성능상으로 그렇게 큰 차이점이 없었다. 그냥 편한거 쓰면 된다. epoll 의 경우는 event 방식이라, event(?) 적인 자세가 필요하다고 할수 있다. 더 민감하고 섬세하게 OS에서 반응해 준다. 처리해야 할 예외적인 부분이 많다. 직접 느껴보라. 아래의 아름다운 글은 어떤 착한 개발자가 올려놓은 글이다. 참고만 하도록 하자. -------------------------------------------------------------------------------------------------------------------- select 기반의 IO 멀티 플렉싱이 느린 이유 select .. 2020. 3. 18.
C++,참조연산 C++,참조연산 여기서 참조연산자 & 과 주소참조 연산자 * 이 두개가 한꺼번에 쓰이고 있다. 왜 이렇게 썼을까? void allocate_doubles(double*& p, size_t& n); { cout > n ; p = new double[n] ; } 연산자를 단계별로 들여다 봅시다. double& 은 말그대로 double의 참조 입니다. double*&은 double*( 포인터 또는 array 배열 )의 참조입니다. 위와 유사하게 사용할수 있는, 이중포인터 double **p; 을 볼까요? p는 아래와 같이 사용할 수 있습니다. *p = new double [n]; **로 값을 받으면, 해당 오브젝트에서 p를 해제할수 있습니다. &참조로 받으면, 해제할 수 없습니다. 2020. 3. 18.
[JAVA] DATA Type l 자료형 Boolean : 논리형 데이터 타입, true와 false로 이루어져 있다. Boolean a = ture; - 논리값 True : Boolean형에 대입할 때 쓰이는 키워드이거나 참을 뜻하는 결과값 False : Boolean형에 대입할 때 쓰이는 키워드이거나 다름을 뜻하는 결과값 Char : 문자형 데이터 타입 ‘ ‘로 에워싸서 표현한다. char a = ‘a’; Byte : 정수형 데이터 타입, 28까지 표현 할 수 있다. -128 ~ 127 Short : 정수형 데이터 타입, 216까지 표현 할 수 있다. -32768 ~ 32767 Int : 정수형 데이터 타입 , 232까지 표현 할 수 있다. -2147483648 ~ 2147483647 Long : 정수형 데이터 타입 , 264까지.. 2016. 7. 12.