본문 바로가기

개발/리눅스 프로그래밍

CentOS7 NetworkManager 문제 동적 네트워크 환경에서 네트워크 자동 설정 및 구성을 담당하는 데몬. 사용하는 네트워크 환경이 자주 바뀌는 경우(Wifi 연결 등) 바뀔 때마다 네트워크 환경을 바꿔주어야 하는데, 이런 환경에 최적화되어있는 프로그램이 NetworkManager입니다. 리눅스 환경에서 사용하는 데몬이며 노트북이나 스마트폰 등의 환경에서 주로 사용합니다. CentOS 6까지는 이 데몬을 선택적으로 설치해 사용할 수 있었지만, CentOS 7부터는 기본 네트워크 관리 데몬으로 사용합니다. 동적 네트워크 자동 설정, GUI를 사용한 네트워크 설정 및 네트워크 설정 기능 개선 등 장점이 많은 데몬이더라구요. 하지만 이 데몬을 서버에서 사용하기에는 모호한 부분이 많았습다. 서버에서는 다른 여러 패키지를 설치해 함께 사용하는데, 충..
localtime() 사용 시 유의사항 시간관련 작업의 제일 기본 함수인 time()과 localtime() 함수를 사용하다가, 재미있는 사실을 알게 되었습니다. #include struct tm *localtime(const time_t *timep); 함수 원형입니다. time_t 는 1970년 1월1일부터 지금까지 흐른 시간(초)을 나타내는 변수이고, 이 값을 사용해 날짜와 시간을 구하는 함수입니다. struct tm이 날짜와 시간을 갖고 있는 구조체이고 이 구조체 포인터를 반환해줍니다. 이 때 중요한건, 함수 내부적으로 static struct tm 변수가 있고 이 변수의 포인터를 반환한다는 것입니다. 즉 함수를 실행할 때마다 같은 주소값을 받게 되는 것입니다. #include #include int main(int args, char..
mariadb-connector 라이브러리 내부 버그 철썩같이 믿고 사용하던 라이브러리 함수에서 버그를 발견했습니다. 입사하고 첫 업무였는데 상당히 신박한걸 보게되었네요. 요약부터 하자면, 1row에 16MB가 넘는 데이터 호출 시, 무한루프가 발생하는 현상입니다. 사용한 라이브러리는 mariadb-connector_c 1.x.x입니다. 소스를 찾긴 했는데 1버전 소스는 없네요 https://github.com/mariadb-corporation/mariadb-connector-c mariadb-corporation/mariadb-connector-c MariaDB Connector/C is used to connect applications developed in C/C++ to MariaDB and MySQL databases.The client lib..
좀비 프로세스 방지 출처 : 아주대학교 시스템 소프트웨어 보안 강의자료 /* * 공부한거 정리하는거라 틀린게 있을 수도 있어요... * 내용에 틀린게 있으면 알려주세요!! */ 유닉스의 모든 프로세스는 종료 시에 종료 상태를 부모 프로세스에 보낸다. 부모 프로세스는 해당 프로세스를 실행한 프로세스인데, 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은 표준입력,..