본문 바로가기

개발

좀비 프로세스 방지 출처 : 아주대학교 시스템 소프트웨어 보안 강의자료 /* * 공부한거 정리하는거라 틀린게 있을 수도 있어요... * 내용에 틀린게 있으면 알려주세요!! */ 유닉스의 모든 프로세스는 종료 시에 종료 상태를 부모 프로세스에 보낸다. 부모 프로세스는 해당 프로세스를 실행한 프로세스인데, wait함수 또는 waitpid함수를 사용해 자식 프로세스의 종료 상태를 받을 수 있다. 하지만 부모 프로세스가 자식 프로세스를 받아주지 않을 경우, 자식 프로세스는 아무 작업도 하지 않지만 종료되지는 못한 채 남아있게 된다. 이를 좀비 프로세스라고 부른다. wait함수와 waitpid함수의 자세한 설명은 다음과 같다. wait : 자식 프로세스가 종료 상태를 보낼 때까지 대기. 부모 프로세스는 block 함수 원형 pid_..
유닉스 파일 함수 정리 출처 : 아주대학교 시스템 소프트웨어 보안 강의자료 /* * 공부한거 정리하는거라 틀린게 있을 수도 있어요... * 내용에 틀린게 있으면 알려주세요!! */ 파일 핸들링에 자주 사용하는 함수들을 정리해봤습니다. 1. open : 프로세스에서 파일을 사용할 수 있도록 파일을 불러오는 함수 파일 원형 int open(const char *pathname, int flag, /* mode_t mode */ ) 헤더 fcntl.h 반환 파일 디스크립터 값을 반환 실패시 -1을 반환 인수 설명 const char *pathname : 파일의 경로 및 이름 int flag : 파일 열기 옵션. 아래 옵션들 모두 fcntl.h에서 사용 가능 - O_RDONLY : 읽기 전용 - O_WRONLY : 쓰기 전용 - O_..
유닉스 파일 시스템2 출처 : 아주대학교 시스템 소프트웨어 보안 강의자료 /* * 공부한거 정리하는거라 틀린게 있을 수도 있어요... * 내용에 틀린게 있으면 알려주세요!! */ 이전 포스팅에서 시스템 파일 테이블에는 file sharing이 가능하다고 언급했다. 2개의 프로세스에서 같은 파일을 열면 파일 테이블에는 2개의 엔트리가 생성되고 이 두 엔트리는 하나의 아이노드를 참조한다는 내용이다. 하지만 이 구조가 달라지는 경우가 있는데 fork()와 dup()를 사용한 경우이다. fork() 함수는 프로세스를 복사하는 함수이다. 이 때 파일 디스크립터 테이블과 그 내용도 함께 복사한다. 그래서 두 프로세스는 하나의 시스템 파일 엔트리를 참조한다. dub()는 파일 디스크립터 엔트리를 복사한다. 때문에 파일 디스크립터는 다르지..
유닉스 파일 시스템 출처 : 아주대학교 시스템 소프트웨어 보안 강의자료 /* * 공부한거 정리하는거라 틀린게 있을 수도 있어요... * 내용에 틀린게 있으면 알려주세요!! */ 유닉스 시스템의 가장 중요한 특징중 하나는 파일 시스템이다. 유닉스 파일 시스템은 수직적 구조, access control 등의 특징이 있지만 이번 포스팅에선 프로그래밍에서 파일을 사용하기 위해 파일 관련 시스템 호출 구조와 주로 사용하는 함수에 대해 정리한다. File Descriptor Table 유닉스의 프로세스는 각각 파일 디스크립터 테이블을 갖는다. 테이블에는 각 파일의 플래그와 시스템 파일 테이블의 위치 정보가 저장된다. 파일 디스크립터 테이블의 인덱스를 파일 디스크립터라고 한다. 파일 디스크립터는 0부터 시작하는 정수인데 0은 표준입력,..
백준 알고리즘 14890 입력 : 지도 정보, 경사로 설치에 필요한 길의 길이 출력 : 지나갈 수 있는 길의 개수 풀이 1. 행과 열을 각각 처리하도록 구현. 지도의 길을 각각 조사해 지나갈 수 있는 길은 1을 리턴, 지나갈 수 없는 길은 0을 리턴했다. 2. 평지에서는 반복문을 continue, 높이가 2칸 이상이면 길을 만들 수 없기 때문에 0을 리턴했다. 3. check변수를 만들어 계단을 설치한 부분은 true로 하고 나머진 false로 만들었다. 길을 올라가야할 때는 지나온 길에 계단을 설치해야 하는데 이미 계단이 있다면 계단을 설치할 수 없기 때문이다. #include using namespace std; int board[101][101]; bool checkForRow[101][101]; bool checkForC..
백준 알고리즘 15686 입력 : 도시의 크기와 유지할 치킨집의 최대 개수 M, 도시 정보 출력 : 치킨집의 최대 개수(M)만큼을 제외하고 모두 폐점시켰을 때 치킨거리의 최소값 풀이 1. 입력받을 때 치킨집과 가정집의 위치를 따로 벡터에 저장한다. 2. 모든 치킨집 중 M개를 고르는 재귀함수를 구현해 M개를 고른 뒤 치킨거리를 구한다. 3. 치킨집을 고른 결과가 중복이 되지 않도록 재귀함수를 구현한다. 중복처리 안하면 시간초과남 #include #include #include #include using namespace std; struct Point{ int x; int y; }; Point getPoint(int x, int y){ Point result; result.x = x; result.y = y; return res..
백준 알고리즘 15685 입력 : 드래곤 커브 갯수, 각 드래곤 커브의 시작점과 시작 방향 및 세대 출력 : 네 꼭지점이 모두 드래곤커브인 정사각형의 갯수 풀이 1. 한 드래곤 커브에 대한 정보를 입력받으면 바로 드래곤커브를 그린다. 2. 최소 1세대 이상이기 때문에 0세대 드래곤커브를 우선 그린다. 3. 세대만큼 반복문을 사용해 드래곤 커브를 그린다 - 각 점을 드래곤커브의 마지막 점을 기준으로 시계방향 90도 회전한 지점에 복사한다. 이를 위한 식은 다음과 같다. x = p.x - stdp.x; y = p.y - stdp.y; return getPoint(stdp.x - y, stdp.y + x); - 드래곤 커브는 bool 2차원 배열에 표현한다. 4. 모든 드래곤 커브를 그린 다음 전체 판에서 꼭지점이 모두 드래곤커브인 ..
백준 알고리즘 14888 입력 : 연산할 수열, 연산자별 사용 가능한 갯수 출력 : 연산 결과로 나온 경우의 수 중에서 최대값과 최솟값 풀이 1. 재귀함수 한 번은 배열의 숫자 사이에 연산자를 하나 넣어본 것과 같다. 2. 함수를 한번 호출해 연산자를 넣어 계산한 뒤 재귀호출 3. 수열의 맨 마지막 수를 지나치면 전역변수 maxR과 minR을 연산 결과값이랑 비교해 갱신하고 return. 4. 연산자 사용시 opSymbol에 남은 횟수를 갱신해야 함 소스코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 ..