programmming tips2012. 9. 18. 12:29
http://www.examcollection.com/cisco/Cisco.TestInsides.640-802.v2012-09-10.by.Mick_Mick.631q.vce.file.html

 

'programmming tips' 카테고리의 다른 글

#ifdef 와 #endif 이해하기  (0) 2011.07.26
man pages  (0) 2011.07.26
int main(int argc, char *argv[]) 이해하기  (0) 2011.07.26
unix 고급프로그래밍 에서 컴파일 기반다지기  (1) 2011.07.25
Posted by babuzzzy
programmming tips2011. 7. 26. 22:03
다음 코드로 설명을 하죠. 앞의 숫자는 쉽게 이해하기 위해 임시로 적어 놓은 라인 번호입니다.
_______________________________
01:#define _DEBUG
02:
03:func()
04:{
05: #ifdef _DEBUG
06: printf("디버그 모드\n");
07: #endif
08:
09: #ifndef _DEBUG
10: printf("일반 모드\n");
11: #endif
12:}
--------------------------------

#ifdef _DEBUG는 _DEBUG가 #define문으로 정의 되어 있다면 아래라인 부터
#endif전 라인까지 포함시키라는 전처리 지시어입니다.

그리고 #ifndef _DEBUG는 _DEBUG가 #define문으로 정의 되어 있지 않다면 아래라인 부터 #endif전 라인까지 포함시키라는 전처리 지시어입니다.

첫번째 라인에서 #define _DEBUG "_DEBUG"를 정의해 주었으므로
#ifdef _DEBUG ~ #endif사이는 포함이 될것이고 #ifndef _DEBUG ~ #endif사이는
포함이 안 될것입니다.
아래는 전처리기로 처리된 소스입니다.

_______________________________
02:
03:func()
04:{
06: printf("디버그 모드\n");
08:
12:}
--------------------------------

이정도면 충분히 이해하실거라 생각합니다. =)
참고로 _DEBUG는 실제로 Visual C에서 디버그 모드에서 기본으로 포함시키는 이름으로 디버그 모드에서만 실행시키고 쉽은 디버그 전용 코드를 #ifdef _DEBUG ~ #endif로 감싸서 사용합니다. 
Posted by babuzzzy
programmming tips2011. 7. 26. 22:01
1 사용자 명령 (User Commands)

2 시스템 호출 (System Calls)

3 C 라이브러리 함수 (C Library functions)

4 디바이스와 네트워크 인터페이스 (Devices and Network Interfaces)

5 파일 포맷 (File Formats)

6 게임과 데모 (Games and Demos)

7 환경, 테이블, 매크로 (Environments, Tables, and Macros)

8 시스템 관리 (Maintenance Commands)

Posted by babuzzzy
programmming tips2011. 7. 26. 22:00
int main(int argc, char *argv[])

일단 
int main() 이랑 int main(void)으로만 코드를 짠후 실행해도 실행하는데 아무 문제가 없다

그럼 argc argv는 무었에 쓰이는 것일까?


일단 main도 함수란것을 잊지말자

항상 필수적으로 쓰는거라서 함수인지도 모르는 사람들이 많을 것이다
그런데 main함수는 호출을 누가하는걸까
함수를 호출하니까 우리 프로그램이 실행이 되는거 아닌가

바로 o/s가 함수를 호출하는 역할을 한다

일단 결론부터 말해보자면
argc argv는 
우리가 사용하는 명령프롬프트 혹은 리눅스 쉘에서 명령어를 쳤을때


인자를 담을 배열이다

예를들면  명령프롬프트에서 

c:\> tile.exe  someone1 someone2

이런 명령을 입력했다고 하면
argc는 3이고
argv[0] = tile.exe
argv[1] = someone1
argv[2] = someone2

이렇게 되는것이다


리눅스 쉘도 이와같은 원리가 적용될것이다

 
Posted by babuzzzy
programmming tips2011. 7. 25. 22:13
오늘은 unix 고급 프로그래밍 에서 컴파일 하는법을 배우겠습니다
일단 컴파일 하는 법을 배우겠습니다
일단 www.apuebook.com 에서 소스를 다운받습니다

자 이제 정리를 하자면


1. tar 로 묶인 파일을 tar 명령으로 압축을 풉니다
--> tar xvfz  src.tar.gz
이렇게 실행하면 압축이 풀리고  apue.2e 폴더가 생기게 됩니다

2. cd apue.2e
apue.2e 폴더로 들어갑니다

3.  Make.defines.linux 파일을 열어 WKDIR 경로를 apue.2e 디렉토리의 풀패스의 경로로 변경합니다
즉 apue.2e 폴더에서 pwd 명령을 수행했을때 나오는 절대경로를 쓰라는 말입니다

4. make
만약 중간에 ARG_MAX 가 정의 되지 않아서 오류가 발생하는경우는
apue.2e/threadctl/getenv1.c 와 apue.2e/threadctl/getenv3.c/getenv3.c 파일을열어서
#include<limits.h> 를 #include<linux/limits.h> 로 변경한후
다시 make  하면 잘 될겁니다

5. make 가 무사히 끝나면 
./lib 에 libapue.a 파일이 생성됩니다
생성된 ./lib/libapue.a 와  ./include/apue.h 를 이용해서 컴파일 하시면 됩니다


---------------------------------------------------------------------------------------

자 그럼 진짜로 되는지 소스파일을 컴파일 해봅시다

저는 책의 맨처음 예제인 myls.c 파일을 컴파일 해보겠습니다


이 파일인데요 말그대로 ls 역할을 하는 코드를 구현하는 겁니다


잘 됩니다

여기서 중요한점은  gcc myls.c -o myls -I(이부분은 대문자 아이)./ -L. -l(이부분은 소문자 엘) apue 이라는 점입니다

gcc 옵션을 보면 뒤에가 뭘 의미하는지 잘 아실거라고 봅니다
 

 

수고하셨습니다
 
Posted by babuzzzy