1. 2장을 시작하기 앞서서...
  1) 아래의 차이점은?
    - const int n = 10;     <-- int 형 변수 n의 데이터 상수화, n 값은 변경 불가
    - const int *n;           <-- int 형 포인트 변수 n의 데이터 상수화
    - int* const n;           <-- int 형 포인트 변수 n에 대한 포인트 상수화
    - const int* const n;   <-- 바로 위의 2가지 모두
  2) 스택과 힙의 필요성
    - (프로그램 코드가 들어가는 text 영역은 제외하고,)
      전역 변수와 static 변수등은 data 영역에 프로그램 시작시에 할당이 된다.
      하지만 지역변수와 매개변수등등 컴파일 타임에 크기가 결정되는 변수들은 stack 영역에 할당이 된다.
      함수 호출 시 할당되고 함수 종료시 할당이 해제되는 과정이 자동으로 반복된다
      문제가 되는 녀석들은 컴파일 타임에 크기가 결정되지 않는 변수들인데
      이러한 변수들은 프로그래머가 일일이 생성시 메모리 할당을 해줘야하고 종료시 해제시켜줘야 한다.
      프로그래머가 malloc아니 free 등으로 이런 변수들을 할당/해제하는 메모리 영역이 heap 영역이다.
  3) malloc/free
      위에서 설명한대로 컴파일 타임이 아니라 런타임에 크기가 결정되는 변수들은 heap 영역에
      동적 할당 및 해제 작업을 해줘야 한다... 그게 바로 malloc/free이다... 당근 free에 각별한 신경을 써야한다.

2. bool 자료형
  - C++에는 bool 자료형이 별도로 존재하므로 이를 잘 이용하자

3. 레퍼런스에 들어가기 앞서서 call by value와 call by reference에 관해서
  - 처음 C를 배울 때 call by value와 포인터를 이용한 call by reference 함수 호출에 관해 배웠었다
    주요한 차이점은 포인터를 이용한 call by reference의 경우, 매개 변수 조작이 함수가 종료되도 남아있고
    call by value의 경우에는 그렇지 않다는 것과 call by value가 메모리를 많이 잡아 먹는다는 것이였다...
    이 얘기는 2장에서 설명하는 call by reference에서도 동일하게 적용된다.

4. 레퍼런스 (reference)
  1) 의미
    - 이름을 지니는 공간에 별명을 붙여주는 행위, 즉 메모리 공간에 2개 이상의 이름을 붙이는 행위
    - 위의 의미에서도 알수 있듯이 이름이 존재하지 않는 상수 따위에겐 reference를 사용할 수 없다
  2) 형태
    - int &ref = val;
  3) 레퍼런스에 의한 call by reference

     - 위의 경우처럼 레퍼런스를 이용한 call by reference의 경우, 포인터를 이용해 함수를 구현하지 않으므로
      프로그래밍 상의 오류를 줄일 수 있고 가독성이 좋아 유지 보수가 편할 수 있다
    - 단점은, 포인터에 의한 call by reference 처럼 함수내에서 변수에 잘못된 연산을 했을 때
      이 결과가 함수를 종료된 이후에도 영향을 끼쳐 전체 프로그램에 문제를 야기할 수 있다는 것과
      함수 호출만봐서는 call by reference인지 call by value인지 알수가 없다는 것이다
    - 위의 잘못된 연산과 관해서는 const 키워드로 매개변수를 상수화 시켜 해결이 가능하므로
      필요한 경우에 따라 reference를 잘 이용하면 좋은 결과가 있을 수 있다
  4) 레퍼런스를 return 하는 함수의 경우
    - 절대 지역변수를 레퍼런스로 return 해서는 안된다
사용자 삽입 이미지

    - 위의 경우, 실행을 해보면 n, val, ref는 모두 같은 주소를 가지고(같은 주소에 붙은 이름이며)
      결과값도 예상한 것처럼 정확하게 나오는 것을 확인 가능하다
사용자 삽입 이미지

    - 이제 위와 같이 변경해서 실행해보면 결과값이 이전과 다르게 나오는 것이 확인 가능하다
    - 단지 매개변수를 reference에서 그냥 call by value로 변경했을 뿐인데 이유는 무엇일까?
      위에서 말한 것처럼 절대 지역변수를 레퍼런스로 return 해서는 안되기 때문이다
    - 2가지 모두 매개변수를 reference 타입으로 return하지만,
      첫번째 경우는 reference로 매개변수를 받았기 때문에 함수가 종료되어도 매개변수 val 라는 레퍼런스만
      없어지는 것이지 그 메모리 공간까지 사라지는 것은 아니기 때문에 이상이 없는 것이고
      두번째 경우는 함수 호출시 val이라는 새로운 메모리를 stack에 할당받아 거기에 같은 복사하여 사용하고
      ref는 val를 레퍼런스하는데 함수 종료시 val은 할당해제가 되고 컴파일러에 의해서 거기에 다른 변수가
      할당이 될수 있으므로 ref로 해당 메모리를 참조하는 시점에 그 데이터 값은 보장할 수가 없게 된다.
    - 쉬운 내용인데 설명만 길어지고 어려워져서... -_-;;;; 암튼 지역변수는 절대 레퍼런스로 리턴해선 안되고,
      이렇게 하는것은 포인터 변수 생성만 하고 초기화나 할당없이 참조하는것과 똑같다고 보면 된다.

5. new와 delete
  1) 일단 아래처럼만 알아두자
    - int *val = new int;
    - int *arr = new int[size];
    - delete val;
    - delete []arr;
by sminchoi 2008. 8. 27. 17:40
티스토리에 source code를 올릴 일이 많은 사람이라면
구글 syntaxhilighter를 사용해보자.

http://code.google.com/p/syntaxhighlighter/
 사이트에서
SyntaxHighlighter_1.5.1.rar를 받은 다음 아무 디렉토리에나 압축을 풀어 놓자.
이중에서 Scripts 폴더와 Styles 폴더에 있는 파일을
티스토리 관리자 모드의 스킨 직접 올리기에서 파일 업로드 해준다.
(/images/ 디렉토리 아래에 올라간 것을 확인한 다음)

skin.html 편집에서
<link type="text/css" rel="stylesheet" href="./images/SyntaxHighlighter.css"></link>
를 추가해준다 (최상단에 link 많이 있는곳에다가)

그리고 skin.html 최하단의
</body>
</html>
바로 위에다가

<!-- google code for syntaxhighlight -->
<script class="javascript" src="./images/shCore.js"></script>
<script class="javascript" src="./images/shBrushCpp.js"></script> 
<script class="javascript"> 
dp.SyntaxHighlighter.ClipboardSwf = './images/clipboard.swf';   
dp.SyntaxHighlighter.HighlightAll('code'); 
</script> 
<!-- google code for syntaxhighlight -->

이 부분을 복사해서 넣은 다음,

이제 글쓰기로 가서
html 모드로 자동 줄바꿈을 해제한 상태에서

<textarea name="code" class="c++">
</textarea>

위의 태그 사이에다 원하는 소스 코드를 추가하면 된다.

by sminchoi 2008. 8. 27. 13:49

vmware 5.5.3에서 나머지는 일반적으로 하고
IDE / 10GB / split 2GB 선택하고, USB / Audio / Floppy 제거하고
debian-31r0a-i386-netinst.iso 설치
한국어/미국/... 쭉 하다가
파티션 방법: 수동으로 파티션 테이블 편집
디스크 파티션하기에서 IDE1 마스터 (hda) - 10.7GB ...  선택
이 장치에 빈 파티션을 새로 만드시겠습니까? <예> 선택
주/논리 10.7GB 남은 공간 선택
새 파티션 만들기 선택
새 파티션 크기 : 10.2 GB 선택
주 파티션 선택
시작 선택
용도: EXT3 저널링 파일 시스템 선택하여 ReiserFS 저널링 파일 시스템 으로 선택 변경
부팅 가능 플래그 : 끄기 선택하여 켜기로 변경
파티션 준비를 마쳤습니다 선택
주/논리 534.6 MB 남은 공간 선택
새 파티션 만들기 선택
534.6 MB 그대로 진행
주 파티션 선택
용도: EXT3 저널링 파일 시스템 선택하여 스왑 영역 으로 선택 변경
파티션 준비를 마쳤습니다.
파티션 나누기를 마치고 바뀐 사항을 디스크에 쓰기 선택
바뀐 점을 디스크에 쓰시겠습니까? <예> 선택
GRUB 부트로더를 마스터 부트 레코드에 설치하시겠습니까? <예> 선택
설치 마치기 <계속> 선택
재부팅 이후 데비안 베이스 시스템 설정 <확인>
하드웨어 시계를 GMT로 맞추시겠습니까? <아니오>
Asia/Seoul 시간대입니까? <예>
루트 비밀번호 설정 후 새로 만들 사용자 이름에서 <취소>
데비안 베이스 시스템 설정에서 APT 설정 선택
다른 CD를 읽으시겠습니까? <아니오>
다른 APT 소스를 추가하시겠습니까? <예>
APT가 아카이브 접근할 방법: http
미러 국가: Korea (South)
사용할 데비안 미러를 선택하세요: ftp.kr.debian.org
HTTP 프록시 정보 : 빈칸
다른 APT 소스를 추가하시겠습니까? <아니오>
security.debian.org로부터 보안 업데이트를 하시겠습니까? <예>
데비안 베이스 시스템 설정에서 언어 관련된 사항 설치 후 설정 선택
데비안 베이스 시스템 설정에서 베이스 시스템 설정 마치기 선택
<확인>
root로 login
vi .bashrc 
image
위와같이 수정하고 source .bashrc 한후 ls / 하면
image
위 화면처럼 디렉토리 이름이 다른 색상으로 표시됨
coffee:~# apg-get install vim 하면
image
위 화면처럼 글자 깨져 나옴
coffee:~# export LC_ALL=C
coffee:~# apt-get install locales
en_US.ISO-8859-1
en_US.UTF-8 UTF-8
ko.KR.EUC-KR EUC-KR  ( <= 선택되어 있음)
ko.KR.UTF-8 UTF-8 선택하고
Default로 en_US 를 선택
(원래 이러면 되어야 하는데, 이상함 apt-get -f install 해줘야 함)
coffee:~# vi .bashrc
image
coffee:~# apt-get install vim
coffee:~# apt-get install manpages-dev
coffee:/usr/src# apt-get install wget
coffee:/usr/src# wget http://kernel.org/pub/linux/kernel/v2.4/linux-2.4.32.tar.bz2
alt + F2 : root login
tty2) coffee:/etc/apt# vi sources.list
image
위 화면처럼 수정
tty2) coffee:/etc/apt# apt-get update
coffee:/usr/src# apt-get install bzip2
coffee:/usr/src# tar xvfj linux-2.4.32.tar.bz2
tty2) coffee:/etc/apt# apt-get install gcc make
tty2) coffee:/etc/apt# apt-get install libncurses5-dev
tty2) coffee:~# touch .vimrc
tty2) coffee:~# vi .vimrc 해서 syntax on 추가
coffee:/usr/src# cd linux-2.4.32
coffee:/usr/src/linux-2.4.32# make mrporper
coffee:/usr/src/linux-2.4.32# make menuconfig
Code maturity level options --->
    [*] Prompt for development and/or incomplete code/drivers
Loadable module support ---> 3개 모두 [*] 인것만 확인
Processor type and features --->
    (Pentium-III/Celeron(Coppermine)) Processor family
        (X) Pentium-4
Networking options --->
    [*] Socket Filtering
SCSI support --->
    SCSI low-level drivers --->
        [*] BusLogic SCSI support
Network device support --->
    Ethernet (10 or 100Mbit) --->
        [*] Elsa, VLB, PCI and on board controllers
            <*> AMD PCnet32 PCI support
File systems --->
    [*] Quota support
    [*] Reiserfs support
    [*] Ext3 journalling file system support
    [M] DOS FAT fs support
Cryptographic options --->
    [*] Cryptographic API
    [*] HMAC support (NEW)
    <M> 모두
<Exit>
coffee:/usr/src/linux-2.4.32# make dep
coffee:/usr/src/linux-2.4.32# make clean
coffee:/usr/src/linux-2.4.32# make bzImage
coffee:/usr/src/linux-2.4.32# cp arch/i386/boot/bzImage /boot/vmlinuz-2.4.32
coffee:/usr/src/linux-2.4.32# make modules
coffee:/usr/src/linux-2.4.32# make modules_install
coffee:/boot/grub# vi menu.lst
image
이렇게 수정하고,
coffee:/boot/grub# reboot 하면 OK
e-mail은 사용하지 않으므로
coffee:~# apt-get remove exim4
coffee:~# apt-get remove exim4-base
coffee:~# apt-get remove exim4-config
coffee:~# apt-cache search gcc --names-only
coffee:~# gcc --version
image
coffee:~# mkdir works
coffee:~# cd works
coffee:~/works# touch hello.c
coffee:~/works# vi hello.c
image
coffee:~/works# gcc hello.c -o hello
coffee:~/works# ./hello
image
Install VMware Tools
image
coffee:~/works# mount /dev/hdc /media/cdrom
coffee:~/works# cd /media
coffee:/media# cd cdrom
coffee:/media/cdrom#  ls
image
coffee:/media/cdrom# cp VMwareTools-5.0.0-13124.tar.gz /tmp
coffee:/media/cdrom# cd /tmp
coffee:/tmp# tar xvfz VMwareTools-5.0.0-13124.tar.gz
coffee:/tmp# cd vmware-tools-distrib/
coffee:/tmp/vmware-tools-distrib# ./vmware-install.pl
(엔터만 쭉)
coffee:/tmp/vmware-tools-distrib# lsmod
(vmhgfs module is for shared folder.)
VM -> Settings 선택하여 Options 탭에서 Shared Folders 선택하여
Add -> 다음 -> Name:shared -> Host folder: d:\vmware\shared(임의의 폴더) -> 다음 -> 마침 -> OK
coffee:/tmp/vmware-tools-distrib# cd /mnt
coffee:/mnt# cd hgfs
coffee:/mnt/hgfs# cd shared
coffee:/mnt/hgfs/shared# touch hello.txt
탐색기에서 D:\wmware\shared 폴더와 연동되는 부분 확인
coffee:/mnt/hgfs/shared# cd /
coffee:/# ln -s /mnt/hgfs/shared /shared
coffee:/# cd /shared
coffee:/shared# ls (확인)
### Make a new system call ###
coffee:/shared#  cd /usr
coffee:/usr# cd src
coffee:/usr/src# cd linux-2.4.32
coffee:/usr/src/linux-2.4.32# pushd .
coffee:/usr/src/linux-2.4.32# cd include
coffee:/usr/src/linux-2.4.32/include# cd asm-i386
coffee:/usr/src/linux-2.4.32/include/asm-i386# vi unistd.h
/250 검색한 후
#define __NR_newcall  253 추가하고 저장
coffee:/usr/src/linux-2.4.32/include/asm-i386# cd ../../arch/i386/kernel
coffee:/usr/src/linux-2.4.32/arch/i386/kernel# vi entry.S
/sys_call_table 검색하여 몇번 넘어가면 .long SYSBOL_NAME...에서 /250으로 검색하여
image
coffee:/usr/src/linux-2.4.32/arch/i386/kernel# cd ..
coffee:/usr/src/linux-2.4.32/arch/i386# popd
coffee:/usr/src/linux-2.4.32# cd kernel
coffee:/usr/src/linux-2.4.32/kernel# touch newcall.c
coffee:/usr/src/linux-2.4.32/kernel# vi newcall.c
image
coffee:/usr/src/linux-2.4.32/kernel# vi Makefile
image
coffee:/usr/src/linux-2.4.32/kernel# cd ..
coffee:/usr/src/linux-2.4.32# make bzImage

coffee:/usr/src/linux-2.4.32# cp arch/i386/boot/bzImage /boot/newcall-2.4.32
coffee:/usr/src/linux-2.4.32# cd /boot
coffee:/boot# ls -tr
coffee:/boot# ls -ltr
coffee:/boot# cd grub
coffee:/boot/grub# vi menu.lst
image
coffee:/boot/grub# reboot
주의! : 커널을 다시 만들었다면 항상 vmware-tools을 reconfig 해주어야한다
coffee:~# /usr/bin/vmware-config-tools.pl
coffee:~# cd works
coffee:~/works# touch test_newcall.c
coffee:~/works# vi test_newcall.c
image
coffee:~/works# gcc -I/usr/src/linux-2.4.32/include test_newcall.c -o test_newcall
혹시,
/tmp/ccuPbWw1.o: In function 'newcall':
test_newcall.c:(.text+0x1c): undefined reference to 'errno'
collect2: ld returned 1 exit status
란 error가 발생하는 경우
#include <errno.h> 추가
coffee:~/works# ./test_newcall
image
coffee:~/works# touch module.c
coffee:~/works# vi module.c
image
coffee:~/works# gcc -D__KERNEL__ -DMODULE -I/usr/src/linux-2.4.32/include -c module.c -o module.o
(-c 옵션이 없으면 linking도 시도해서 error 발생)
coffee:~/works# insmod module.o
coffee:~/works# lsmod
coffee:~/works# rmmod module
image

'LINUX' 카테고리의 다른 글

ftp에서 mget 사용시 확인없이 진행하기  (0) 2008.11.13
ctags, screen, vim plugins  (0) 2008.11.03
vim 사용법  (1) 2008.10.31
.bashrc  (0) 2008.08.20
#!/bin/bash  (0) 2008.08.13
by sminchoi 2008. 8. 23. 13:36

1. printf와 scanf를 대신하는 입출력 방식
  1) 구버전/신버전의 헤더 파일
    - #include <iostream.h> : 구버전의 헤더 파일
    - #include <iostream> : 신버전의 헤더 파일, std::cout, std::cin, std::endl 처럼 써야 한다
  2) 출력
    - count<<”문자열”<<endl;
    - std::cout<<”문자열”<<std::cout::endl;
    - count<<정수<<’문자’<<”문자열”<<endl; 도 가능, 자료형에 상관없이 출력이 가능하므로 편리함
  3) 입력
    - cin>>입력받을변수>>입력받을변수…;
  4) 기타
    - C에서와는 다르게 함수의 시작 부분에서 뿐만 아니라 어디서든 변수 선언이 가능 (for문 안에서 선언과 초기화 동시도 가능)

2. 함수 오버로딩 (Function Overloading)
  1) 함수 오버로딩이란 : 동일한 이름을 가지면서 매개변수의 개수 혹은 타입을 다르게 가지는 함수를 중복해서 정의하는 것
  2) C : 컴파일러에서 함수의 이름만으로 참조, 호출하므로 오버로딩이 불가능
  3) C++ : 함수이름과 매개변수의 타입까지 참조하므로 함수 오버로딩이 가능하다
  4) 매개변수의 개수가 다르거나 타입이 다른 경우만 허용하며, 리턴값의 타입이 다른 경우는 오버로딩이 허용되지 않는다

3. 디폴트 (Default) 매개 변수
  1) 디폴드 매개 변수란 : 함수 선언시 전달되지 않은 인자에 자동으로 입력되도록 디폴트 값이 정의되어 있는 매개 변수
  2) example

    위와 같은 함수에서 function()으로 매개 변수가 생략되어 호출되는 경우에 a는 자동으로 디폴트 값 0을 가지게 됨
  3) 기타
    - 함수 오버로딩과 디폴트 매개 변수가 중복되는 경우 컴파일 에러 발생하므로 주의 필요

4. 인-라인 (in-line) 함수
  1) C : C에서는 #define을 이용한 매크로로 전처리기에 의해 인-라인화
  2) C++ : 함수의 선언시에 inline 선언을 하면 함수가 자동으로 인라인화 되고, 컴파일 타임에 컴파일러는 inline 할지를 판단하여 처리한다
  3) 장점
    - 사용법이 간단하고 구현이 용이함
    - 매크로 함수의 장점을 반영하면서, 컴파일러에 의한 최적화가 가능

5. 이름 공간 (namespace) 에 대한 소개
  1) namespace : 큰 프로젝트 등에서 동일한 함수 이름의 사용으로 인한 오류를 막기 위해 공간에 이름을 부여하는 것
  2) 기타
    - :: 범위지정연산자
    - ::val 과 같이 사용하여 전역 변수에 접근이 가능
    - using 을 이용하여 namespace를 생략하고 사용이 가능하나 namespace의 기본 필요성을 고려해서 사용이 필요

by sminchoi 2008. 8. 20. 20:15
ARM9 기반의 SOC 설계와 응용편집부 지음 아이티씨 2006.02.20책소개 SOC 입문서. 이 책에서는 SOC(System on Chip)의 개념과 특징, ARM 프로세서와 시스템 버스에 대한 내용을 소개하고 있다. 또한 (주)한백전자의 실습 장비와 이를 통한 실습을 기반으로... 최저가 24,700원가격비교

by sminchoi 2008. 8. 20. 17:13
임베디드 리눅스 기초와 응용 (인텔 PXA270 기반, VMWare 이용)
저자
우종정, 사공준 지음
출판
한빛미디어 펴냄 | 2007.08.03 발간
소개
재미있고 다양한 실습 예제와 단계별 학습으로 손쉽게 배우는 임베디드시스템의 기본 임베디드 리눅스 입문서. 이 책은 임베디드시스템을 이해하기 위해 꼭 필요한 기반 개념을 풍부한 사례와 개념도를 통해...  더보기
가격
22,000원 → 최저가 19,800원가격비교

'BOOK' 카테고리의 다른 글

Beginning Linux Programming  (0) 2011.01.12
ARM9 기반의 SoC 설계와 응용  (0) 2008.08.20
리눅스 커널 2.6 구조와 원리  (1) 2008.08.20
ARM으로 배우는 임베디드 시스템  (0) 2008.07.31
임베디드 리눅스 입문  (0) 2008.07.31
by sminchoi 2008. 8. 20. 17:04
리눅스 커널 2.6 구조와 원리타카하시 히로카즈오다 이츠로야마하타 이사쿠 지음 | 이영희 옮김 한빛미디어 2007.06.18책소개 리눅스 커널 2.6 입문서. 이 책은 리눅스 커널에서 자주 사용하는 함수의 동작 원리를 그림을 곁들여 이해하기 쉽게 설명한다. 또한 커널의 내부 구조와 함수와의 관계를 쉽게 이해시킬 수... 최저가 21,000원가격비교

by sminchoi 2008. 8. 20. 16:51

.bashrc

gentoo에서 root 계정에 .bashrc를 작성해두었는데도 동작을 하지 않는 경우가 있는데 (원래 그런건가?)
일반 사용자 계정에서 처럼 .bashrc를 사용하고 싶으면

/etc/profile 이나 /etc/bash/bashrc 를 열어서
if [ –f $HOME/.bashrc ] ; then source $HOME/.bashrc 라고 써주거나
[[ –f ~/.bashrc ]] && . ~/.bashrc
라고 써주면 될 듯…

실제로 해본건 아니고, 아마 그렇게 하면 될 것 같은 생각이… ㅋㅋ

root로 login 하는 경우에는
/etc/profile 이나 /etc/bash/bashrc 에서 설정을 읽어오는 것 같고…

일반 계정으로 login 시에는
계정의 home directory에 .bash_profile 에서 .bashrc 유무를 확인하는 것 같음.

굳이 여러 사용자가 같이 쓰는 경우가 아니라면
alias 정도 수정이라면 /etc/profile 에서 수정하고
각 계정별로 .bashrc 를 작성하지 않는것이 작업하기 편한 것 같기도 함

'LINUX' 카테고리의 다른 글

ftp에서 mget 사용시 확인없이 진행하기  (0) 2008.11.13
ctags, screen, vim plugins  (0) 2008.11.03
vim 사용법  (1) 2008.10.31
sc_debian.wmv 따라하기  (0) 2008.08.23
#!/bin/bash  (0) 2008.08.13
by sminchoi 2008. 8. 20. 14:55

this 포인터의 다양한 사용 용도 가 있겠지만,
클래스 내부의 멤버 변수에 접근하기 위한 필요성이 있을 때 this 포인터를 먼저 떠올리길 바란다.

일반적으로 아래와 같은 코드에서
멤버변수와 지역변수(매개변수도 일종의 지역변수이므로) aaa 가 존재하고
멤버변수 aaa에 생성자의 매개변수 aaa를 대입했으면 하고 프로그래밍 하는 경우에
aaa = aaa;
라고 쓰면 절대 멤버변수에 값을 쓸 수가 없다. (지역변수가 멤버변수보다 우선하므로)
그래서 this 포인터를 사용하여 아래와 같이
this->aaa = aaa;
로 사용하면 원하는 결과가 가능하다.

#include <iostream>
using std::cout;
using std::cin;
using std::endl;

class data {
    int aaa;
    int bbb;

public:
    data(int aaa, int bbb) {
        //aaa=aaa;
        this->aaa=aaa;

        //bbb=bbb;
        this->bbb=bbb;
    }
    void printAll() {
        cout<<aaa<<" "<<bbb<<endl;
    }
};

int main(void) {
    data d(100, 200);
    d.printAll();

    return 0;
}

당연히 main()에서 d.printAll() 에 의한 출력은 “100 200” 이 된다.

by sminchoi 2008. 8. 13. 10:23

스크립트 파일을 보다 보면, 제목과 같은 구문이 자주 눈에 띄는데,
#! 은 스크립트의 제일 앞에서 이 파일이 어떤 명령어 해석기에 의해서 동작을 해야하는지 시스템에게 알려줍니다.

#! 은 “매직 넘버”로써 실행 가능한 쉘 스크립트라는 것을 나타내는 특별한 표시자입니다.
파일 제일 위에 있을때만 인식이 가능하며, 이외의 위치에서는 일반적인 주석으로 동작합니다.

#!/bin/bash
#!/bin/sh
#!/usr/bin/perl
등등이 가능하며, 심지어는

#!/bin/rm
으로 자기 자신을 지우는 스크립트도 가능합니다.

당연히 리눅스에서 다른 머신에 쉽게 이식이 가능하게 하기 위한 용도로 사용됩니다.

'LINUX' 카테고리의 다른 글

ftp에서 mget 사용시 확인없이 진행하기  (0) 2008.11.13
ctags, screen, vim plugins  (0) 2008.11.03
vim 사용법  (1) 2008.10.31
sc_debian.wmv 따라하기  (0) 2008.08.23
.bashrc  (0) 2008.08.20
by sminchoi 2008. 8. 13. 09:26
| 1 2 3 4 5 6 |