linux
-
System call과 glibcIT/Linux C 2013. 2. 24.
System call이란?자, 일단 System call이란 사용자 공간(User Space)에서 시스템(Kernel)에게 필요한 기능을 직접 요청하는 것으로 프로세스 또는 디스크 I/O, 메모리 요청등 종류도 다양하다. 리눅스에서 사용자 공간에 제공되는 System call들은 다양한 아키텍쳐(i386, powerPC,..)등을 지원하며 약 300여개 정도 명령들을 지원한다. ex) 리눅스 커널에서 x86 시스템에 대한 System call Table(arch/x86/kernel/syscall_table_32.S)ENTRY(sys_call_table) .long sys_restart_syscall /* 0 - old "setup()" system call, used for restarting */ .l..
-
int type을 bool type으로 활용하는 방안IT/Linux C 2013. 1. 18.
C언에서 !을 사용하게 되면, 0이 아닌 숫자의 경우에 대해서 0으로 변경하고 0인 경우에는 1로 값을 변화시켜준다. !을 한번만 사용하게 되면 자연스럽게 0 or 1의 값을 갖게 되고 !!을 하게 되면 최초 0일 경우에는 0으로 그리고 0이 아닌 값인 경우에는 1로 값이 변환되게 된다. 즉, bool type처럼 0 or 1의 값으로 활용 가능하다. int i = 12345; printf("%d\n", !i); printf("%d\n", !!i); 출력01 위의 내용들이 사실 필요할까 싶지만 다음의 linux kernel에서의 일부 코드를 살펴보면, static int ethtool_get_one_feature(struct net_device *dev, char __user *useraddr, u32 ..
-
Ubuntu에서도 Evernote를 실행해보자IT/Tools 2013. 1. 14.
윈도우 배포판 프로그램들은 윈도우에서만 실행되고, 맥에서 빌드된 프로그램들은 맥에서만 실행된다. 빌드된 환경에 따라서 binary format(Native)이 다르기 때문에 다른 운영체제에서는 실행을 할 수 없다. 리눅스에서는 오픈소스들로 만들어진 프로그램들은 쉽게 설치해서 사용할 수 있지만, 회사에서 만든 프로그램들은 소스코드를 오픈하지 않기 때문에 만든 곳에서 다른 운영체제에 대한 지원을 해주지 않으면 사용할 수가 없다. 보통은 Virtualbox와 같은 Virtual Machine으로 윈도우를 설치해서 사용해야 한다. Wine 윈도우용 프로그램을 리눅스에 직접 동작시켜주는 Wine이란 프로그램을 찾았다. http://www.winehq.org/ 엄밀히 말해 Wine은 POSIX 호환되는 운영체제에 ..
-
kernel macro, container_ofIT/Linux Kernel 2013. 1. 11.
container_of 란?#define container_of(ptr, type, member) ({ \ const typeof( ((type *)0)->member ) *__mptr = (ptr); \ (type *)( (char *)__mptr - offsetof(type,member) );}) container_of는 커널 매크로로써, 구조체의 멤버변수의 주소값만 알고 있다면 그 구조체 주소를 얻어 올 수 있는 방법입니다. 세가지 인자를 갖습니다.1. 멤버변수의 주소값(ptr)2. 구조체 type(struct)3. 멤버변수 이름(member) 이 세가지 정보를 가지고 구조체에 해당하는 주소를 가져오는데요. 원리는 간단합니다.일단, 해당 멤버변수가 구조체 시작 위치에서 어디에 위치하는지 offset..
-
ubuntu 데스크탑과 서버 커널의 차이점은?IT/Linux Kernel 2013. 1. 8.
서버와 데스크탑의 차이점이란?일반적으로 서버와 데스크탑은 사용 용도가 다르다. 데스탑은 문서작성, 게임, 웹, 그래픽등 다양한 환경과 같이 범용적인 PC 환경을 사용할 수 있음을 의미하지만 서버용은 서비스에 최적화됨을 의미합니다. 백그라운드 프로세스들을 주로 사용하여 서비스와 데이터처리, 네트워크 처리에 최적화되어야 한다. 하드웨어 자원이 일을 많이 하도록 GUI를 사용하지 않는 것도 그 이유이다. Ubuntu에서의 커널 차이점데스크탑에서는 genric이란 키워드를 사용하는 커널을 사용한다. 서버용을 확인하기 위해서 12.10 버전 Ubuntu 서버를 설치해보았다. morenice@ubuntu-morenice:~/linux-3.5.0$ uname -aLinux ubuntu-morenice 3.5.0-17..
-
bash, string handlingIT/DevOps 2013. 1. 2.
bash 쉘 스크립트를 작성하다보면 string에 대해서 자주 다루게 될 것이다. 예를 들어 파일 리스트를 읽어서 확장자를 확인하거나 일부 문자열을 변경 해야 하는 일이다. 기본적으로 몇 가지만 숙지하고 있으면 스크립트 작성에 비용을 줄일 수 있다. Extract a substring $ MYVAR=morenice.kr $ echo ${MYVAR##*e} .kr $ echo ${MYVAR%%.*} morenice 변수명 뒤에 ## 이후의 string 매칭을 해서 추출한다. 변수에 저장된 string의 맨 앞에서부터 매칭해서 찾는 방식으로 # 하나만 쓰면 첫번째 찾은부분부터 자르고, # 두개를 사용하게되면 제일 마지막에 찾은 부분부터 추출한다. 변수에 저장된 string의 맨 앞에서부터 찾기 때문에 '*'..
-
어떻게 Linux kernel 공부를 시작하죠?IT/Linux Kernel 2013. 1. 1.
linux kernel에 대해서 공부를 시작하게 되었다면, 일단 어려움을 직면한 것이다. 어떻게 공부를 시작할 것인가? 무엇을 토대로 공부를 할 것인가? 등등으로 구글님을 만나서 질문을 하기 시작할 것이다. kernel 자체는 간단한 내용이 아니고 구글님이 말해주는 방대한 자료 때문에 어지럽기 시작할 것이기 때문이다. 일단, 추상화된 개념부터 디테일하게 공부하는 Top-Down 방식을 권장한다. 큰 개념을 이해하지 못한다면 디테일한 정보들에 대한 이해가 떨어지고 어떤 경우에는 코드를 봐도 이해할 수 없는 지경에 이르게 될 것이기 때문이다. 물론 가장 좋은 방법은 멘토를 만드는 것이다.하지만 멘토가 없다면?? 멘토가 없을 수 있다. kernel을 공부하시는 사람을 오프라인에서 만날 수 있는 것은 쉽지 않다..
-
C언어, enum 타입의 크기는?IT/Linux C 2012. 12. 19.
enum 타입으로 정의된 리스트를 정리하고 있다가, 최대치가 궁금해서 간단한 확인을 해보았다. 변수들은 일반적으로 sizeof를 이용하여 크기를 알아 낼 수 있는데, sizeof(enum)이 안되기 때문에, struct로 enum 타입을 감싸고 sizeof로 크기를 확인해보았다. linux 64bit 그리고 gcc 컴파일러를 사용하였다. #include enum enum_number { ONE, TWO, THREE }; struct enum_struct { enum enum_number num; }; int main(int argc, char* argv[]) { printf("enum:%ld\n",sizeof(struct enum_struct)); return 0; } enum:4 4byte 크기면, e..