beginning linux programming

28
Hanyang University, K orea Beginning Linux Programming 한한한한한 한한한한한한한한한한 3 한한 한한 1 한한

Upload: monet

Post on 15-Jan-2016

90 views

Category:

Documents


2 download

DESCRIPTION

Beginning Linux Programming. 한양대학교 전자전기컴퓨터공학부 3 학년 실험 1 주차. 목 차 (Context). 배경 소개 UNIX LINUX GNU & FSF 공지 사항 시스템 관리팀 연락처 Workstation 실 사용 안내 계정 안내 개발 환경 소개 개발 환경 C 컴파일러 사용하기 헤더 파일 정적 라이브러리 동적 라이브러리. 배경 소개. UNIX LINUX GNU & FSF. UNIX?. AT&T 의 부설 Bell 연구실에서 개발 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Beginning Linux Programming

Hanyang University, Korea

Beginning Linux Programming

한양대학교 전자전기컴퓨터공학부3 학년 실험 1 주차

Page 2: Beginning Linux Programming

Hanyang University, Korea

목 차 (Context)

배경 소개 UNIX LINUX GNU & FSF

공지 사항 시스템 관리팀 연락처 Workstation 실 사용 안내 계정 안내

개발 환경 소개 개발 환경 C 컴파일러 사용하기 헤더 파일 정적 라이브러리 동적 라이브러리

Page 3: Beginning Linux Programming

Hanyang University, Korea

배경 소개 UNIX

LINUX

GNU & FSF

Page 4: Beginning Linux Programming

Hanyang University, Korea

UNIX?

AT&T 의 부설 Bell 연구실에서 개발

1974 년 C 언어로 작성된 최초의 OS

Solaris, FreeBSD, OpenBSD, System V ..

Page 5: Beginning Linux Programming

Hanyang University, Korea

LINUX?

Linux = Unix Clone

Linus Torvalds( 헬싱키 대학 ) 제안 + 전세계 유닉스 프로그래머 개발

Slackware, SuSE, Debian, Red Hat, ..

Page 6: Beginning Linux Programming

Hanyang University, Korea

GNU & FSF

GNU GNU is Not UNIX.

GNU Project developing a complete UNIX style OS which is free software (LINUX)

FSF(Free Software Foundation) Preserve, protect and promote the freedom to use, study, copy, modify, and

redistribute computer software, and to defend the rights of Free Software users.

Page 7: Beginning Linux Programming

Hanyang University, Korea

공지 사항 시스템 관리팀 연락처

Workstation 실 사용 안내

계정 안내

Page 8: Beginning Linux Programming

Hanyang University, Korea

시스템 관리팀 연락처

Hompage : http://eece.hanyang.ac.kr

E-mail :[email protected]

02-2282-0579

Page 9: Beginning Linux Programming

Hanyang University, Korea

Workstation 실 사용 안내 웍스테이션 실 사용 가능 시간

평일 : 13 시 ~ 21 시

네트웍을 통한 원격 접속 방법 네트웍으로 접근 가능한 웍스테이션 apollo, baccus, quassar, diana, eros, kalypso, hercules, artemis, iccarus, muja, cupid, n

eptune, xanadu, rapier, pluto, titan

ssh 를 사용하여 접속 Putty 사용 추천 (Google 에 putty 검색해서 다운로드 ) xxx.hanyang.ac.kr 서버에 접속 [test@apollo guest]$ ssh artemis.hanyang.ac.kr 계정 입력 암호 입력

Page 10: Beginning Linux Programming

Hanyang University, Korea

계정 안내 계정당 할당된 디스크 용량 150MB

사용자 홈디렉토리 /home/data1/ 계정이름

프린트시 lp 명령을사용 ( 개인당 100 장씩 사용가능 , 100 이상 사용자는 관리자에게 연락할 것 )

Page 11: Beginning Linux Programming

Hanyang University, Korea

개발 환경 소개 개발 환경

C 컴파일러 사용하기

헤더 파일

정적 라이브러리

동적 라이브러리

Page 12: Beginning Linux Programming

Hanyang University, Korea

개발 환경

VI Editor

GCC C Compiler

GDB Debugger

Page 13: Beginning Linux Programming

Hanyang University, Korea

C 컴파일러 ( 실습 )

C Program 을 만들기 위해서 Editor 로 vi 를 사용한다 .

[test@apollo guest]$ vi

~ VIM - Vi IMproved~~ version 6.1.320~ by Bram Moolenaar et al.~ Vim is open source and freely distributable~~ Help poor children in Uganda!~ type :help iccf<Enter> for information~~ type :q<Enter> to exit~ type :help<Enter> or <F1> for on-line help~ type :help version6<Enter> for version info~~ 0,0-1 All

Page 14: Beginning Linux Programming

Hanyang University, Korea

C 컴파일러 ( 실습 )

다음 명령을 실행한다 .

[test@apollo guest]$ vi filename.c

~~~~~~~~~~~~~~"filename.c" [New File] 0,0-1 All

Page 15: Beginning Linux Programming

Hanyang University, Korea

C 컴파일러 ( 실습 )

위의 화면에서 “ i“ 를 누르면 파일의 내용을 쓸 수 있게 된다 .

~~~~~~~~~~~~~~-- INSERT -- 0,1 All

Page 16: Beginning Linux Programming

Hanyang University, Korea

C 컴파일러 ( 실습 )

위와 같은 상태에서 다음과 같은 Code 를 작성한다 .

File:filename.c 1 #include <stdio.h> 2 3 int main() 4 { 5 printf("Hello World\n"); 6 exit(0); 7 }

Page 17: Beginning Linux Programming

Hanyang University, Korea

C 컴파일러 ( 실습 )

위와 같은 작업을 수행한 후 작성한 내용을 저장하여야 하는데 , shift + : 키를 누르면 화면 아래에 “ : “ 표시가 생긴다 . 여기에 “ wq” 명령을 수행하면 filename.c 라는 파일이 만들어 진다 .

int main(){ printf("Hello World\n"); exit(0);}

~~~~~~"filename.c" [New] 8L, 76C written[test@apollo guest]$

Page 18: Beginning Linux Programming

Hanyang University, Korea

C 컴파일러 ( 실습 )

이제 만들어진 C 프로그램에 대한 컴파일 , 링크 작업을 해야 하는데 다음과 같은 명령으로 수행할 수 있다 .[test@apollo /guest]$ cc -o filename filename.c

수행 후 아무런 error 메시지가 나오지 않았다면 두개의 파일을 볼 수가 있다 .

[test@apollo guest]$ cc –o filename filename.c[test@apollo guest]$ ls -altotal 40drwxr-xr-x 4 test user 4096 Aug 27 02:11 .drwxr-xr-x 6 test user 4096 Aug 5 03:21 ..-rwxr--r-- 1 test user 11641 Aug 27 02:11 filename-rw-r--r-- 1 test user 76 Aug 27 02:11 filename.c[test@apollo guest]$

Page 19: Beginning Linux Programming

Hanyang University, Korea

C 컴파일러 ( 실습 )

화면의 두 파일 중 초록색의 파일이 실행 파일이다 . ./filename 이라 명령을 입력한 후 실행 시켜본다 . “ ./ “ 이 명령은 현재 디렉토리를 의미한다 . 위의 명령의 수행 결과로 다음과 같은 화면이 나타난다 .

[test@apollo guest]$ ./filenameHello World[test@apollo guest]$

Page 20: Beginning Linux Programming

Hanyang University, Korea

헤더파일 C 언어 및 기타 프로그래밍 언어에서의 상수 또는 시스템 라이브러리를 호출하기

위한 함수들은 /usr/include 에 위치

cc –I/usr/openwin/include fred.c

어떤 함수에 대해 알고 싶을때 grep 명령을 사용할 수 있음

[test@apollo guest]$ cc –I/usr/openwin/include fred.c[test@apollo guest]$ cd /usr/include[test@apollo include]$ grep EXIT_ *.h...stdlib.h:#define EXIT_FAILURE 1stdlib.h:#define EXIT_FAILURE 0...[test@apollo include]$

Page 21: Beginning Linux Programming

Hanyang University, Korea

라이브러리 파일 라이브러리 (library)

재사용이 가능하도록 작성된 컴파일된 함수의 모음 표준 시스템 라이브러리는 /lib 와 /usr/lib 에 위치 라이브러리의 이름은 lib 로 시작

라이브러리의 종류 정적 라이브러리 ( 확장자 .a) 공유 라이브러리 ( 확장자 .so, .sa)

Page 22: Beginning Linux Programming

Hanyang University, Korea

라이브러리 파일 컴파일시 – l 옵션을 사용하여 위치를 지정

fred.c 를 컴파일 하는데 , 실행 파일의 이름은 fred 를 사용하고 수치 연산 라이브러리를 사용

여기서 -lm 은 표준 라이브러리 디렉토리인 /usr/lib 의 libm.a 를 의미

[tes@apollo /guest]$ cc –o fred fred.c /usr/lib/libm.a[tes@apollo /guest]$ cc –o fred fred.c –lm

Page 23: Beginning Linux Programming

Hanyang University, Korea

정적 라이브러리 라이브러리 사용

프로그램 작성시 함수의 선언이 포함된 헤더 파일을 include

확장자 .a

ar(archieve) 정적 라이브러리 생성 , 관리 프로그램

Page 24: Beginning Linux Programming

Hanyang University, Korea

실습하기 – 정적 라이브러리 #1

File:fred.c 1 #include <stdio.h> 2 3 void fred(int arg) 4 { 5 printf("fred: you passed %d\n", arg); 6 }

File:bill.c 1 #include <stdio.h> 2 3 int bill(char* arg) 4 { 5 bill("bill:you passed %s\n", arg); 6 exit(0); 7 }

Page 25: Beginning Linux Programming

Hanyang University, Korea

실습하기 – 정적 라이브러리 #2

[test@apollo guest]$ cc –c fred.c bill.c[test@apollo guest]$ ls *.obill.o fred.o[test@apollo include]$

File:lib.h 1 /* 2 This is lib.h. It declares the functions 3 fred and bill for users 4 */ 5 6 void bill(char *); 7 void fred(int);

Page 26: Beginning Linux Programming

Hanyang University, Korea

실습하기 – 정적 라이브러리 #3

bill() 과 fred() 를 시험하기 위해 program.c 파일을 작성

File:program.c 1 #include "lib.h" 2 3 int main() 4 { 5 bill("Hello World"); 6 exit(0); 7 }

[test@apollo guest]$ cc –c program.c[test@apollo guest]$ cc –o program program.o bill.o[test@apollo guest]$ ./programbill: you passed Hello World[test@apollo guest]$

Page 27: Beginning Linux Programming

Hanyang University, Korea

실습하기 – 정적 라이브러리 #4

라이브러리를 생성하기 위해 ar 프로그램을 사용한다 . ar 을 사용하여 라이브러리가 생성한 뒤 라이브러리 목차를 정리하기 위해 ranlib

를 사용한다 .

[test@apollo guest]$ ar crv libfoo.a bill.o fred.oa – bill.oa – fred.o[test@apollo guest]$ ranlib libfood.a[test@apollo guest]$ cc –o program program.o libfood.abill: you passed Hello World[test@apollo guest]$

Page 28: Beginning Linux Programming

Hanyang University, Korea

공유 라이브러리 정적 라이브러리의 단점

많은 프로그램이 같은 라이브러리 함수를 사용할 때 메모리 낭비

공유 라이브러리의 등장 프로그램이 함수 코드 자체를 가지는 것이 아니라 실행시 유효한 공유 코드에 대한

참조를 가지도록 링크된다 .

Windows 와 비교 .so : .DLL .sa : .LIB