C 기초특강 본강의에들어가기전
토론주제 과학 (Science)/ 공학 (Engineering) 일반화 (Generalization)/ 특별화 (Specialization) 아마추어 (Amateur)/ 프로페셔널 (Professional) 하드웨어 (hardware)/ 소프트웨어 (software)
프로그래밍언어 인터프리터 (interpreter)/ 컴파일러 (compiler) Shell Python Ruby BASIC Visual BASIC PHP JSP FORTRAN COBOL C Visual C++ Java Script Pascal C++ Java C#
C 언어학습 실습환경 UNIX/LINUX 환경 vi 사용법 gcc(compiler) 사용법 C 기초 Keyword 소개 기본입출력함수 (printf, scanf) 타입, 변수, 기본연산 조건문과반복문 (if-else, for, while) 함수 포인터 라이브러리활용 문자열 수학 파일입출력
Xshell4 설치 www.netsarang.co.kr 실습환경구축 lily.mmu.ac.kr 계정신청 USB등으로개인폴더유지
Xshell 사용법 (1) 다운로드및설치 (www.netsarang.co.kr) 새로만들기 연결 이름 (N) : 원하는이름지정 (lily) 호스트 (H) : lily.mmu.ac.kr
Xshell 사용법 (2) SSH 사용자이름 : id 입력 SSH 사용자인증 : 암호입력
Xshell 사용법 (3) 문자코드 글자체, 크기
접속초기화면 유닉스시스템접속에성공하면메시지출력 마지막으로접속한시간과 IP 주소출력 홈디렉토리 로그인한직후의작업디렉토리 프롬프트 사용자의입력을기다리는표시 콘쉘 : $
banner 화면에큰문자를출력 예 : banner unix date 날짜와시간을출력 clear 화면을깨끗이지움 man 명령에대한설명출력 예 : man banner 기초명령의사용
현재디렉토리확인 : pwd pwd 현재작업디렉토리의절대경로출력 사용법 ssh lily.mmu.ac.kr $ pwd /home/kgu $
디렉토리이동 : cd 현재작업디렉토리를지정한디렉토리로이동 디렉토리명을지정하지않으면자신의홈디렉토리로이동 사용법 cd [ 디렉토리명 ] ssh lily.mmu.ac.kr $ cd /tmp $ pwd /tmp $ cd $ pwd /home/kgu $ /tmp 로이동 홈디렉토리로이동
디렉토리파일목록확인 : ls ls [ 옵션 ] [ 파일또는디렉토리명 ] 파일이나디렉토리에대한정보출력 옵션 옵션 a l d R 기능 All. 시스템에숨겨진파일 ( 디렉토리들 ) 을모두보여줌 Long. 파일과디렉토리에대한상세정보를보여줌 Directory. 디렉토리에대한정보만출력 Recursive. 서브디렉토리내의모든디렉토리들을반복출력 F 파일종류를구분. ( 실행파일은 *, 디렉토리는 / 를붙임 ) u 파일, 디렉토리이름을최종접근시간순으로화면에출력
디렉토리파일목록확인 - ls 사용법 ssh lily.mmu.ac.kr $ ls -a....profile $ ls.profile.profile $ 지정한파일정보 현재디렉토리의모든파일목록 1) ls 2) ls -a 3) ls -l 4) ls -al 5) ls -d 6) ls -F 7) ls -u 8) ls /tmp 9) ls /etc 10)ls /etc/passwd 11)ls l /etc/passwd
파일내용보기 : cat 간단한파일보기명령으로짧은파일에적합 옵션 -n : 행번호출력 사용법 간단한파일생성도가능 Cat > test.txt 화면입력이 test.txt 파일로생성됨 종료시 Ctrl-d cat [ 옵션 ] 파일명 ssh lily.mmu.ac.kr $ cat /etc/hosts # # Internet host table # 127.0.0.1 localhost 192.168.10.118 loghost $
파일내용보기 : more more [ 옵션 ] 파일명 파일의내용을한화면씩출력 옵션 + 행번호 : 지정한행부터출력 명령 다음페이지 : space 이전페이지 : b 종료 : q 문자열찾기 : / 문자열 사용법 ssh lily.mmu.ac.kr $ more /etc/services
파일내용보기 : tail tail [ 옵션 ] 파일명 파일의마지막부분출력 옵션 + 행번호 : 지정한행부터끝까지출력 - 숫자 : 화면에출력할행수 -f : 파일출력이종료되지않고주기적으로반복출력 사용법 ssh lily.mmu.ac.kr $ tail /etc/services
파일복사 : cp cp [ 옵션 ] 원본파일명복사파일명 특정파일이나디렉토리를다른이름으로복사 옵션 -i : 파일을덮어쓸때경고메시지출력 -r : 디렉토리복사 사용형태 사용형식 동작 cp 파일 1 파일 2 파일 1 을파일 2 로복사. cp 파일들디렉토리파일들을디렉토리밑에같은이름으로복사. cp -r 디렉토리 1 디렉토리 2 디렉토리 1 을디렉토리 2 로복사. 디렉토리 1 의파일도모두복사됨.
파일복사 : cp 사용법 ssh lily.mmu.ac.kr $ cp hello.c h.c $ cp f1.c f2.c f3.c dir1 $ cp -r dir1 dir2 $ 실습하기 1) mkdir Unix/ch3 2) cd Unix/ch3 3) mkdir Practice 4) cd Practice 5) cp /etc/services test.txt 6) ls 7) cp /etc/services. 8) mkdir Temp 9) cp test.txt Temp 10)cp Temp Tmp 11)ls 12) cp -r Temp Tmp 13) ls Temp 14) ls Tmp
파일삭제 : rm rm [ 옵션 ] 파일명 / 디렉토리명 지정한파일이나디렉토리를삭제 옵션 -i : 확인후삭제 -f : 무조건삭제 -r : 디렉토리삭제 < 주의 > 한번삭제한파일은되살릴수없음!!
파일이동 : mv mv [ 옵션 ] 원래이름새이름 파일이름을바꾸거나이동 옵션 -i : 확인후이동 사용형식 사용형식 동작 mv 파일 1 파일 2 파일 1 의이름을파일 2 로바꿈. mv 파일명 디렉토리지정한파일들을디렉토리로옮김. mv 디렉토리 1 디렉토리 2 디렉토리 1 의이름을디렉토리 2 로바꿈.
vi 의사용방법 1 편집기에서파일호출 2 편집기에서 파일수정 디스크 버퍼 ( 임시저장장소 ) 3 파일저장 파일내용을잘못수정한경우버퍼의내용무시 작업취소기능제공
vi 의동작모드 vi 시작 vi 종료 입력한내용을명령어로해석 ZZ 명령모드 i,i,a,a,o,o :, /,? Esc 입력모드 입력한내용이버퍼로옮겨져추가, 수정됨 커서이동페이지이동글자삭제줄삭제등 Enter Esc vi 종료 q,q! 마지막행모드 특별명령처리 Vi 에서는대소문자를별도의명령으로해석한다. w HDD 검색, 저장바꾸기줄이동등
vi 시작하기 vi 새로운파일시작 파일저장할때이름지정 vi 파일 _ 이름 지정한이름이없으면새로운파일생성 지정한이름이있으면기존파일열기 ssh lily.mmu.ac.kr $ vi ssh lily.mmu.ac.kr $ vi first
vi 초기화면 80 칼럼 26 행 ~ ~ ~ ~ ~ ~ ~ 빈 ~ 줄 ~ ~ ~ ~ ~ first.txt [ 새파일 ] 화면크기에따라행과칼럼수는달라진다.
입력명령 입력명령 ( 명령모드 -> 입력모드 ) 명령키 i a o I A O 수행작업커서앞에삽입커서뒤에삽입현재줄다음에삽입현재줄첫칸앞에텍스트입력현재줄끝에텍스트입력현재줄앞에삽입 주의! 입력이끝나면 입력모드 에서 명령모드 로돌아와야한다. Esc
저장및종료명령 저장명령 저장하거나종료하려면 명령모드 로돌아와야한다. 명령키 종료명령 ( 저장후종료또는그냥종료 ) 수행작업 :w 현재의파일명으로파일저장 :w 파일명 지정한파일명으로파일저장 명령키 수행작업 :q 작업내용을저장하였으면 vi 종료 :q! :wq :wq 파일명 작업내용을저장하지않고 vi 종료 작업내용을저장한후 vi 종료 작업내용을지정한파일명으로저장한후 vi 종료 ZZ(shift-zz) 작업내용을저장한후 vi 종료
[ 실습하기 ] 입력및저장 실습하기 실습디렉토리구성 ssh lily.mmu.ac.kr $ cd $ mkdir Unix/ch4 $ cd Unix/ch4 $ vi test.txt 파일생성 : text.txt mane is Gil-dong Hong. I wake up in the morning. This is a living loom. A that s a bedloom.
[ 실습하기 ] 입력및저장 실습하기 ssh vi lily.mmu.ac.kr test.txt mane is Gil-dong Hong. I wake up in the morning. This is a living loom. A that s a bedloom. ssh lily.mmu.ac.kr My mane is Gil-dong Hong. I wake up in the morning. This is a living loom. And that s a bedloom. test2.txt 1) i 2) My 3) Esc 키 4) G 5) o 6) nd 7) Esc 키 8) :w test2.txt
커서이동명령 [1/3] 화살표키이용 H, J, K, L 키이용 왼쪽 h k 커서 위로 l j 아래로 오른쪽 이동 명령어 한행위 k 한행아래 j 한문자오른쪽 l 한문자왼쪽 h 행의시작 ^ 또는 0 행의마지막 $ 이전행의처음 - 다음행의처음 + 또는
커서이동명령 [2/3] 현재화면에서커서이동 이동 키화면맨위로 키화면중간으로 키화면맨아래로 다음단어의첫문자로 이전단어의첫문자로 다음단어의끝글자로 명령키 H M L w b e 지정한곳으로이동 이동 줄번호 n 위치로 파일의끝줄로이동 명령키 :n 또는 ng :$ 또는 G n 줄만큼앞으로이동 n+ n 줄만큼뒤로 n- 현재문장의처음으로 ( 다음문장의처음으로 ) 현재문단의처음으로 { 다음문단의처음으로 }
커서이동예제 H L 커서이동명령 [3/3] 1 #include <stdio.h> 2 3 main() { 4 char c; k 5 6 printf( Hello, C World\n ); 7 printf("=====\n"); M w ^ $ 8 printf( select menu item\n"); 9 printf("1. unix\n"); e 10 printf("2. linux\n"); j 11 printf("=====\n"); 12 } ~ ~ b
실습하기 vi test.txt [ 실습하기 ] 커서이동 ssh lily.mmu.ac.kr My mane is Gil-dong Hong. I wake up in the morning. This is a living loom. And that s a bedloom. 1) 커서를 1 행으로이동 : 1G 또는 :1 2) 1 행의두번째단어로이동 : w 3) 2 행으로이동 : j 4) 커서를좌로이동 : ㅣ 5) 마지막행으로이동 : G 또는 :$
화면이동 화면에나타나지않은부분으로화면이동 #include <stdio.h> main() { printf( Hello 1\n ); printf( Hello 2\n ); ssh lily.mmu.ac.kr printf( Hello 3\n ); printf( Hello 4\n ); printf( Hello 5\n ); printf( Hello 6\n ); printf( Hello 7\n ); printf ( Hello 8\n ); } 이동반화면위로반화면아래로한화면위로한화면아래로한줄만위로한줄만아래로파일내용다시출력 명령키 ^u ^d ^b ^f ^y ^e ^l
[ 실습하기 ] 화면이동 실습하기 vi /etc/profile 왼쪽순서에따라화면이동을실습 ssh lily.mmu.ac.kr # ident # The profile trap 2 3 export LOGNAME PATH if [ $TERM = ].. 1):set nu 2)^u 3)^d 4)^f 5)^b 6)^y 7)^e 8)^l 9):set nonu
내용삭제및취소 명령모드에서동작 명령어 삭제대상 수행작업 x, #x 문자 커서위치의문자삭제 ( 예 :3x) dw, #dw 단어 커서위치의단어삭제 dd, #dd 줄 커서위치의줄삭제 D(shift-d) 줄의일부 커서위치부터줄끝까지삭제 u U 방금수행한명령취소 해당줄의모든편집취소
[ 실습하기 ] 삭제및취소 ssh lily.mmu.ac.kr My mane is Gil-dong Hong. I wake up in the morning. This is a living loom. And that s a bedloom. ssh lily.mmu.ac.kr Gil-dong Hong. I wake up in the morning. This 1)1G 2)11x 3)jj 4)llll 5)D 6)j 7)dd 8)u 9)dd 10):w
명령모드에서동작 내용수정 키 수정대상 수행작업 r 문자 현재커서위치의한문자변경 R 문자열 현재커서부터 ESC 입력까지변경 cw 단어 커서위치부터현재단어의끝까지내용변경 cc 줄 커서가위치한줄의내용변경 s, ns 문자열 현재커서부터내용변경 ( 예 :5s) C 줄일부 커서위치에서줄끝까지내용변경
[ 실습하기 ] 수정 ssh lily.mmu.ac.kr My mane is Gil-dong Hong. I wake up in the morning. This is a living loom. And that s a bedloom. ssh lily.mmu.ac.kr My name is Gil-dong Hong. I wake up in the morning. This is a living room. And that s a bedroom. 1) 1G 2) w 3) cw 4) name 5) Esc 키 6) jjw 7) r r 8) r ] 9) j j 10)7s 11)bedroom 12) Esc 키 13):w
편집기능 복사, 잘라내기, 붙이기 명령모드에서동작 명령어 yy, #yy p P dd, #dd 수행작업현재행을버퍼로복사 ( 예 :4yy) 현재행다음에버퍼내용삽입현재행위쪽에버퍼내용을삽입현재행을잘라내기 행삭제와잘라내기는동일한동작이다.
버퍼의사용 버퍼 Vi 는작업내용을버퍼에저장 실행취소가능 복사하기, 잘라내기에사용 버퍼종류 Unnamed buffer ( 이름없는버퍼 ) Named buffers ( 이름이있는버퍼 ) a, b, z Numbered buffers( 번호가있는버퍼 ) 1, 2,, 9 사용예 a3yy -> 현재행부터아래로 3줄을 a버퍼에저장 ap -> a버퍼의내용을붙이기
범위지정방법 편집하는범위를지정하는방법 마지막행모드에서사용 : 범위편집 _ 명령 형태로사용 범위 의미 1,$ 첫줄에서마지막줄까지 ( 파일내의모든줄 ) % 첫줄에서마지막줄까지 ( 파일내의모든줄 ) 1,. 첫줄에서현재줄까지.,$ 현재줄에서마지막줄까지.-2 현재줄에서앞쪽으로 2번째줄 10,20 10번째줄에서 20번째줄까지
마지막행모드에서복사와잘라내기 마지막행모드에서사용 명령어 수행작업 :#y # 으로지정한행을복사 (:10y -> 10행을복사 ) :< 범위 >y 범위로지정한행을복사 ( 예, :10,20y -> 10행 ~20행까지복사 ) :#d # 으로지정한행을삭제 (:10d -> 10행을삭제 ) :< 범위 >d 범위로지정한행을복사 ( 예, :10,20d -> 10행 ~20행을삭제 ) :pu :#pu 현재행다음에버퍼내용붙이기 # 으로지정한행다음에버퍼내용붙이기 ( 예, :5pu)
[ 실습하기 ] 버퍼를이용한복사 실습하기 vi test.txt -> test2.txt 로복사 ssh lily.mmu.ac.kr My name is Gil-dong Hong. I wake up in the morning. This is a living room. And that s a bedroom. ssh lily.mmu.ac.kr test.txt My name is Gil-dong Hong. And that s a bedroom. I wake up in the morning. This is a living room. And that s a bedroom. ssh lily.mmu.ac.kr My name is Gil-dong Hong. I wake up in the morning. This is a living room. This is a living room. And that s a bedroom. 1) :3 2) yy 3) p 4) j 5) dd test2.txt 6) p 7) ayy 8) :w 9) :e test.txt 10) ap
검색기능 마지막행모드에서사용 명령어 수행작업 / 문자열현재위치부터파일앞쪽으로문자열탐색? 문자열현재위치부터파일뒤쪽으로문자열탐색 n N 다음문자열탐색 역방향으로문자열탐색
실습하기 [ 실습하기 ] 문자열탐색 vi test.txt ssh lily.mmu.ac.kr My name is Gil-dong Hong. And that s a bedroom. I wake up in the morning. This is a living room. And that s a bedroom. 1)/room 2)n 3)?name 4)n 5)N
바꾸기기능 마지막행모드에서사용 명령어 :s/ 문자열1/ 문자열2/ :< 범위 >s/ 문자열1/ 문자열2/ :< 범위 >s/ 문자열1/ 문자열2/g :< 범위 >s/ 문자열1/ 문자열2/gc 수행작업 커서가위치한줄에서만문자열 1 을문자열 2 로바꿈 < 범위 > 안의모든줄에대해서각줄의첫번째문자열 1 을찾아문자열 2 로바꿈 < 범위 > 안의모든줄에대해서모든문자열 1 을문자열 2 로바꿈 < 범위 > 안의모든줄에대해서각문자열 1 을문자열 2 로치환할때수정할지안할지를묻는다
[ 실습하기 ] 범위를이용한바꾸기 실습하기 vi test.txt ssh lily.mmu.ac.kr My name is Gil-dong Hong. And that s a bedroom. I wake up in the morning. This is a living room. And that s a bedroom. ssh lily.mmu.ac.kr My name was Gil-sun Hong. But that s a bedroom. I wake up in the morning. This was a living room. But that s a bedroom. 1):s/dong/sun/ 2):%s/is/was/g 3):2,5 s/and/but/g 4):w
기타기능 [1/2] 파일읽어오기 / 여러파일편집 명령어 수행 :r 파일명 지정한파일을현재커서위치에삽입 :e 파일명 현재파일대신지정한파일을읽음 :n vi 시작시여러파일을지정하였을경우다음파일로이동 vi 에서쉘명령실행 명령어 수행작업 :! 명령 vi 를중단하고지정한명령수행 (vi 로돌아올때 : ) :sh vi 를잠시빠져나가서쉘을수행 (vi 로돌아올때 : exit)
실습하기 [ 실습하기 ] 쉘명령실행 vi test2.txt ssh lily.mmu.ac.kr My name is Gil-dong Hong. I wake up in the morning. This is a living room. This is a living room. And that s a bedroom. 1):!ls -l 2)Esc 키 3):sh 4)ls -l 5)exit
기타기능 [2/2] 알아두면유용한명령키들 명령어 수행 :f 파일명파일이름을지정한이름으로변경 :w %.old 현재파일을.old 이름으로저장해둘때 ^g 기본적인파일정보출력 ( 파일명, 라인수등 ) J 현재줄과다음줄연결. 바로이전에수행한명령재실행 ~ 현재커서위치의한문자를소문자혹은대문자로전환
실습하기 [ 실습하기 ] 기타명령어 vi test2.txt ssh lily.mmu.ac.kr My name is Gil-dong Hong. I wake up in the morning. This is a living room. This is a living room. And that s a bedroom. 1):3 2)J 3)l 4)~ 5). 6). 7):w ssh lily.mmu.ac.kr My name is Gil-dong Hong. I wake up in the morning. THIS is a living room.this is a living room. And that s a bedroom.
vi 환경설정 vi 의환경을설정하는특수명령과변수들 명령어 :set nu :set nonu :set list :set nolist :set showmode :set noshowmode :set :set all 수행작업 파일내용의각줄에줄번호표시 ( 보이기만할뿐저장은되지않는다.) 줄번호취소 눈에보이지않는특수문자표시 (tab:^i, eol:$ 등 ) 특수문자보기기능취소 현재모드표시 현재모드표시기능취소 set 으로설정한모든 vi 변수출력 모든 vi 변수와현재값출력
주요환경변수 환경변수 :set 현재설정확인 :set number 화면에줄번호보이기 :set nonumber 줄번호보이지않기 :set autoindent 자동들여쓰기 :set cindent C 언어스타일들여쓰기 :syntax enable :syntax clear number 외에도 tabstop( 탭간격 ), filetype( 파일종류 ), cindent ( 들여쓰기형식 ) 등 [ 실습하기 ] 각환경변수설정 / 결과화면확인후캡처, 정리
들여쓰기재정렬 =G = ( 들여쓰기 ) G ( 전영역 ) 기타팁 =100G ( 현재줄부터 100 번째줄까지재정렬 ) [ 실습하기 ] 20 줄이상의 C 프로그램작성 공백, 탭등을임의로삽입하거나삭제한후들여쓰기재정렬기능확인
UNIX 환경에서의 C 프로그래밍 1. vi 로 C 프로그램작성 예 : vi test.c 2. 컴퍼일러로실행파일만들기 예 : gcc test.c ( 기본실행파일 a.out) 예 : gcc o test test.c ( 실행파일 test) 3. 오류발생시메시지확인후 1 실행 4. 실행하기 예 :./a.out ( 현재폴더의 a.out 실행 ) 예 :./test ( 현재폴더의 test 실행 )