블로그 이미지
progh2
지루한 것에서 벗어나 재미난 것 속으로 풍덩~☆

calendar

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

Notice

Recent Post

Recent Comment

Archive

제1장 시작하기
유닉스 프로그램 PATH
유닉스는 PATH 변수에서 항목을 구분하기 위해 MS-DOS와 같이 세미콜론(;)이 아니라 콜론(:)을 사용한다는 것에 주의하기 바란다. 유닉스가 콜론을 먼저 사용하기 시작했으므로 유닉스가 왜 다른 문자를 선택했는지에 대해서 의문을 가질 필요는 없다! 다음은 PATH 변수의 예이다.
[CODE]/usr/local/bin:/usr/bin:.:/home/neil/bin:/usr/X11R6/bin[/CODE]
여기서 PATH 변수는 표준 프로그램 위치, 현재 디렉토리(.), 사용자의 홈 디렉토리와 X윈도우 시스템에 대한 내용을 가진다.

이맥스
이맥스 튜터리얼 -> C + h, t
C + v 다음페이지
M + v 이전페이지
C + x c 끝내기(!)

man vs. info
info 가 man 보다 보통 더 유용하다!

헤더파일
대개 /usr/include와 서브디렉토리에 위치한다. 또, C 컴파일러에서 -I (아이) 플래그를 지정하여 서브 디렉토리나 다른 어떤 디렉토리의 헤더 파일을 사용할 수 있다.
[CODE]$ gcc -I/usr/openwin/include fred.c[/CODE]
종종 헤더 파일에서 특별한 정의문과 함수 원형을 찾기 위해 grep 명령을 사용하는 것은 편리하다. 프로그램으로부터 종료 상태를 반환하기 위해 사용되는 정의문의 이름을 알 필요가 있다고 가정하자. 간단히, /usr/include 디렉토리로 이동하고 예상되는 이름으로 grep을 사용한다. 다음과 같이 할 수 있다.
[CODE][07/18_14:44][progh2@aged:~]$ cd /usr/include/ [07/18_14:44][progh2@aged:/usr/include]$ grep EXIT_ *.h argp.h:#define ARGP_HELP_EXIT_ERR 0x100 /* Call exit(1) instead of returning. */ argp.h:#define ARGP_HELP_EXIT_OK 0x200 /* Call exit(0) instead of returning. */ argp.h: (ARGP_HELP_SEE | ARGP_HELP_EXIT_ERR) argp.h: (ARGP_HELP_SHORT_USAGE | ARGP_HELP_SEE | ARGP_HELP_EXIT_ERR) argp.h: (ARGP_HELP_SHORT_USAGE | ARGP_HELP_LONG | ARGP_HELP_EXIT_OK \r stdlib.h:#define EXIT_FAILURE 1 /* Failing exit status. */ stdlib.h:#define EXIT_SUCCESS 0 /* Successful exit status. */ [07/18_14:44][progh2@aged:/usr/include]$[/CODE]

라이브러리 파일
라이브러리(libraries)는 재사용이 가능하도록 작성된 미리 컴파일된 함수의 모임이다. 대개 /lib 와 /usr/lib에 저장된다. C 컴파일러나 (더욱 정확히)링커는 기본적으로 표준 C 라이브러리를 검색하므로 검색할 라이브러리를 알 필요가 있다. 따라서 표준 디렉토리에 라이브러리를 저장해 두고 컴파일러가 이것을 찾도록 요구하는 것은 충분치 않으며 라이브러리는 독특한 명명 전통을 따르고 명령 라인에서 지정될 필요가 있다.
라이브러리 이름은 항상 lib으로 시작하며 c라이브러리를 가리키는 c나 수치 연산 라이브러리를 가리키는 m과같이 라이브러리의 내용을 가르키는 부분이 나타난다. 이름의 마지막 부분은 마침표(.)로 시작하고, 라이브러리의 형태를 지정한다.
전형적인 정적 라이브러리를 가르키는 .a
공유 라이브러리를 가리키는 .so 와 .sa
일반적으로 라이브러리는 ls /usr/lib을 통해서 볼 수 있듯이 정적 라이브러리와 공유 라이브러리의 형태로 존재한다. 컴파일러에게 전체 경로 이름을 지정하거나 -l 플래그를 사용하여 라이브러리를 찾도록 지시할 수 있다. 예를 들어, 다음은 함수에 대한 참조를 해결하기 위해 표준 C 라이브러리 외에 수치연산 라이브러리를 검색하도록 지시한다.
[CODE]$cc -o fred fred.c /usr/lib/libm.a[/CODE]

비슷한 결과를 다음을 통해 얻을 수도 있다.
[CODE]$cc -o fred fred.c -lm[/CODE]
-lm은 표준 라이브러리 디렉토리의 하나인 /usr/lib에 있는 libm.a라는 라이브러리에 대한 단축기능(shorthand)이다. -lm 표기 방식의 추가적인 장점은 공유 라이브러리가 존재할 때 컴파일러가 이것을 자동으로 선택한다는 것이다.
라이브러리는 일반적으로 헤더 파일과 같이 표준의 장소에 저장되지만, 컴파일러에서 대문자의 -L 플래그를 사용하여 검색 디렉토리에 추가할 수 있다. 예를들어, 다음은 디렉토리 /usr/openwin/lib에 존재하는 라이브러리 libX11의 버전을 사용하여 x11fred라는 프로그램을 컴파일하고 링크할 것이다.
[CODE]$cc -o x11fred -L/usr/openwin/lib x11fred.c -LX11[/CODE]
posted by progh2