작은 분야의 일을 훌륭하게 해내는 자그마한 도구들을 개발자들에게 제공하고 개발자들은 이 도구들을 창의적으로 결합하여 사용하자.

Slides:



Advertisements
Similar presentations
시스템 프로그래밍 박진희 컴퓨터 시스템 연구실. 2 Project 3 Key-value store 유일한 Key 에 하나의 Value 를 가지고 있는 방식 - Key 와 Value 를 쌍으로 관리 - Hash table, B-Tree, B+ Tree 등 분산형 데이터베이스에서.
Advertisements

제 2 장 프로그램 개발과정. 통합 개발 환경  통합 개발 환경 (IDE: integrated development environment)  에디터 + 컴파일러 + 디버거.
우리테크 녹색경영을 달성하기 위한 녹색경영 방침 □ 우리테크는 파워 드레인트탭을 제조, 판매하는 회사로써 오랜경험과 축적된 노하우를 통해 독 자적인제품 개발에 주력하고 있다. □ 또한 우리테크는 안정적이고 친환경적인 제품 생산을 위해 항상 연구와.
일본주식시장의 신 고레가와긴조 투자전략 6 조 안승권. 신문수 발표자 : 신 문 수. 출 생 : 1897 효고현에서 출생 학 력 : 초등학교졸업, 사업가 1992 년 95 세 사망 유일한 자서전 1981 년 스미토모 금속광산 주식매매 200 억엔 벌다⇒ 일본 소득세 납세.
해외서, 국내서 요약 ‘북집’ 모바일 서비스 이용방법
변비 재활전문센터 재활 간호사 김은화.
(금) 김 희 준 Makefile (금) 김 희 준
Linux/UNIX Programming
시작부터 끝까지 진지한 궁서체로 진행하는 완벽한 주입식의 하드코어한 리눅스/장난감 세미나
제3장 C 프로그래밍 환경.
고급 시스템 프로그래밍 제1장 소개 창병모 숙명여대 컴퓨터과학과.
05. gcc, make, gdb.
1장 리눅스의 기본 개념과 프로그램 작성 리눅스의 기본 개념 시스템에 접속하기 리눅스의 프로그래밍 환경
Q & A (사실상 혼인·이혼) Q. 사실상 혼인·이혼 관계를 어떻게 처리해야 하나요?   사실 혼인·이혼은 부부 모두 동의 여부를 확인하고, 자녀, 이·통·반장으로부터 「사실(이)혼 확인서」를 징구해야 합니다. 만약 어느 한쪽이 동의하지 않는 경우는.
베 어 스 타 운 동 계 시 즌 주소: 경기도 포천시 내촌면 소학리 295번지 문의 : (代)
리더십 역량 개발 계획서 핵심인재 양성 코스를 마치신 여러분, 수고하셨습니다.
Host 컴퓨터 개발환경 이해 Lecture #3 (리눅스 관하여…).
리눅스 실습 정성훈.
제 11장 C 프로그래밍.
C 프로그래밍 소개 숙명여대 창병모 2011 가을.
제 8 장  파서 생성기 YACC 사용하기.
Makefile의 이해 ㈜FALinux 박진호.
임베디드 프로그래밍 Lecture #
공학기초설계 Youn-Hee Han 강의 소개 & MinGW & gcc 공학기초설계 Youn-Hee Han
1 유닉스 시스템 프로그래밍 개요.
제9장 C 프로그래밍 환경 창병모
작 성 자: 김선영 메 일: sunyzero (at) gmail (dot) com 버 전: 1.30
Linux Compile.
Internet Protocol and Programming
Beginning Linux Programming
1장. 프로그래밍 언어, C 프로그래밍.
Geek-OS Project 정영진
UniSQL/X 실습과제 (1) ■ 실습 기간: ~
1주차: 프로그래밍언어란 무엇인가? C 언어란? C 프로그래밍을 위한 준비
Linux/UNIX Programming
Mips cross compile OS LAB.
국가대표 생애주기교육 프로그램 참여방법 안내
adopted from KNK C Programming : A Modern Approach
2019년 2월 24일 오후 4시 59분 제2장 표준 입출력 함수
Linux/UNIX Programming
제 5장 저항·코일·콘덴서 5-B 김영두·박은정·정진구 전기전자기술.
Kernel Programming Environment
Chapter 13 Programming Tools
수업 첫 날 교육B 황유미 첫 수업 계획에 대해 알아보도록 하겠습니다..
Internet Protocol and Programming
쉽게 풀어쓴 C언어 Express 제2장 프로그램 작성 과정 C Express.
연결링크 이미지를 마일리지샵 내에 기획전으로 제작하여 오픈/노출 사이즈 가로 1000/세로 상관x 배너사이즈 가로 400
Lecture Notes on Computer Networks 주 홍 택 컴퓨터공학과 계명대학교
editing program files with vi 기본적인 Linux commands
제9장 C 프로그래밍 환경 TOPCIT (Test of Practical Competency in IT)
Linux/UNIX Programming
Homework 7… 마지막 수업시간까지 (실습) 매개변수로 입력 받아 처리할 수 있도록 수정해 보세요
마음의 성전이 더 아름다운 조촌교회.
HW 1: Buffer Overflow.
C언어 개론.
1.비 사업용(자가용 및 관용) 차 종 적 용 상 의 구 분 승합 자동차 (버스) 1 종
Lab 1. 시스템 호출을 이용하는 mycp.c mycphint1.c & mycphint2.c coding & compile & run 제출 방법 (집에서도 접속 가능합니다) 2 Electronic versions: multi.incheon.ac.kr ( )의.
Implementation.
GDB - GNU Debugger 김진용.
순천향대학교 공연영상미디어학부 미디어콘텐츠전공
Internet Protocol and Programming
(4)잎의 구조와 기능 학습목표 잎의 구조와 기능을 설명할수 있다. 기공의 구조와 증산의 조절 작용을 설명할 수 있다.
房思琪的初恋乐园 ‘팡쓰치’로 보는 문학의 힘 정은비.
Makefile
비축사업 전자계약시스템 도입 용역 사용자매뉴얼(업체담당자용) Version 1.0.
Eclipse를 이용한 Embedded Linux 응용 프로그램 개발
교 육 순 서 화재예방과 진화요령 긴급상황 시 대처요령 소방시설 사용 화재진화 및 피난 기타 당부 및 질문.
C프로그래밍 도구 컴퓨터공학과 강성인.
이성준 Library 만들기 이성준
Presentation transcript:

작은 분야의 일을 훌륭하게 해내는 자그마한 도구들을 개발자들에게 제공하고 개발자들은 이 도구들을 창의적으로 결합하여 사용하자. 9. C 프로그래밍 도구 (유닉스 철학 하나) 작은 분야의 일을 훌륭하게 해내는 자그마한 도구들을 개발자들에게 제공하고 개발자들은 이 도구들을 창의적으로 결합하여 사용하자.

9.1 C언어 9.2 단일모듈 프로그램 번역(컴파일) 디버깅 라이브러리 유지 프로 파일링 소스코드를 지원하는 도구 프로그램 작성 및 실행 소스 파일 작성 : vi , emasc 편집기 사용 번역 링크 실행

9.2 단일모듈 프로그램 프로그램 번역 다중모듈 프로그램 재사용 함수 컴파일 하기 cc SourceFile -o ExecutableFile (또는 gcc SourceFile -o ExecutableFile) -o : 실행 파일 이름 명시, 디폴트는 a.out (예) $ cc reserve.c  a.out 실행파일 생성 $ cc reserve.c -o reverse  reverse 실행파일 생성 에러발생  메시지 출력, 실행파일 생성 안됨 에러 수정 후 컴파일 성공  실행 파일 생성 다중모듈 프로그램 새 프로그램 개발시 기존의 프로그램 활용 cut and paste : 동일코드중복 다중모듈 프로그램 : 함수 공유, 유용 재사용 함수 특정 기능 수행부분을 별도로 독립시켜 번역 목적 모듈끼리 링크 시켜 실행(reusable) 목적 모듈 작성 : cc의 -c 옵션 사용

9.3 다중 모듈 프로그램 목적 모듈 링크 ld (gcc 에는 없음) CC -c SourceList : -c 옵션 사용 cc -c reverse.c main1.c cc reverse.o main1.c  a.out 실행파일 생성 cc -c reverse.c main1.c cc -c main1.c cc reverse.o main1.o -o main1  main1 실행파일 생성 ld (gcc 에는 없음) 여러 목적모듈 링크시에 호출되는 유닉스의 독립적인 로더 명시된 목적모듈과 라이브러리 모듈을 서로 링크하여 실행파일 생성 ld -n -Lpath * objMoudle * library * -lx * [ -o outputfile] -o : 실행파일이름 지정, 디폴트는 a.out -n : 동적 링크 모듈에 반대되는 독립적 수행파일 생성 -l : ld의 표준 디렉토리(/lib, /usr/lib) 탐색 -L : -lx 옵션에 탐색경로 추가 #include <stdio.h> 디폴트 표준 헤더 파일 경로 /usr/include에서 찾아 옴 #include “reverse.h” 상대경로에서 찾아 옴

9.3 다중 모듈 프로그램 다중모듈 프로그램 유지 make ar sccs 유닉스 파일 의존 시스템 목적모듈과 실행 파일의 최신버전의 유지를 보증 ar 유닉스 파일 보관 시스템 목적 모듈을 저장 sccs 유닉스 소스 코드 관리 시스템 소스 파일과 헤더 파일들의 각 버전을 추적

9.4 유닉스 파일 의존 시스템 : Make 기능 다중 모듈 프로그램의 재사용을 유지하고, 프로그램 수정에 대한 재번역을 최소화 makefile 파일의 상호 의존 관계의 목록 make make파일을 참조하여 파일을 최신버전으로 개정 make [ -f makefile ] -f : 파일이름 명시  기본이름 : Makefiles 복수개의 파일과 목적 파일 컴파일 makefiles 이름에 제한이 없으나 파일 이름 뒤에 .make 표기 권장

9.4 유닉스 파일 의존 시스템 : Make makefiles 작성 및 규칙 targetList : dependencyList commandList targetList : 목적 파일 목록 dependencyList : 의존 파일 목록 commandList : 명령어 목록 (예) main1 : main1.o reverse.o cc main1.o reverse.o -o main1 main1.o : main1.c reverse.h cc -c main.c reverse.o : reverse.c reverse.h cc -c reverse.c

9.4 유닉스 파일 의존 시스템 : Make main1 main1.o reverse.o main1.c reverse.h (예) 규칙을 순서대로 조사하면서 상호 의존 트리를 작성 make는 leaf노드에서 root노드까지 진행하면서 부모 노드의 마지막 수정시간이 자식노드의 수정시간보다 이전이거나 없으면 명령어 목록대로 수행 main1 main1.o reverse.o main1.c reverse.h reverse.c

9.4 유닉스 파일 의존 시스템 : Make make 실행 touch 매크로(Macros) 그 외 정보들 (예) $ make -f main1.make cc -c main.c cc -c palindrome.c -o main2 번역의 단순화를 위해 중복 번역요소 제거 touch 지정된 파일의 수정일자를 현재의 시스템 시간으로 변경 touch -c { fileName } + -c : 지정 파일이 없을 경우 파일 생성 안함 매크로(Macros) make에서 지원하는 기능 make 파일 내에 모든 $(token)는 replacementText로 대치 token = replacementText 규칙 .c.o: $(CC) $(CFLAGS) $(CPPFLAGS) -c $< CFLAGS= -O (예) cflags= -g (gdb를 위한 디버깅 정보 포함) –p (모든 매크로 정의 출력) 그 외 정보들 $ man make

9.5 유닉스 파일 보관 시스템 : AR make는 파일규칙을 모두 식별해야 하는 단점 archive ar 목적모듈을 구성하고 그룹화 시키기 위한 유닉스 파일 보관 시스템 .a 확장자를 갖는 특별한 archive 형식의 파일 생성 archive 파일에 어떤 유형의 파일이라도 추가하고, 삭제하고, 바꾸고, 덧붙인다. archive의 목차(table of content)를 제공한다. ar 사용자가 archive를 생성하고, 다룰 수 있게 한다. archive 파일로부터 필요로 하는 목적 모듈은 필요에 따라 자동적으로 링크 목적모듈 링크 시에 유틸리티에 대한 매개변수 감소로 효율성 증대

9.5 유닉스 파일 보관 시스템 : AR ar key archiveName fileName+ archiveName .a로 끝나도록 되어 있음 key d archive로부터 파일을 삭제 q 이미 존재하고 있어도 archive 파일의 끝에 덧붙임 r 파일이 archive 내에 존재하지 않으면 추가하고 , 존재하지 않으면 현재 버전을 치환 t 표준출력으로 archive의 목차를 보여 줌 x archive로부터 파일들을 현재의 디렉토리로 복사 v 긴 출력으로 보여 줌

9.5 유닉스 파일 보관 시스템 : AR Archive의 생성 파일의 추가 파일 덧붙이기 목차 얻기 파일 제거 파일 추출 첫 번째 파일 추가 시에 자동 생성 파일의 추가 명명된 archive 파일에 파일을 추가, 없을 시 생성 ar r archiveName { fileName }+ (예) ar r atring.a reverse.o palindrome.o 파일 덧붙이기 기존의 archive 파일에 목록이 있어도 무조건 덧붙임 ar q archiveName { fileName }+ 목차 얻기 ar t archiveName { fileName }+ 파일 제거 ar d archiveName { fileName }+ 파일 추출 archive로부터 파일들을 현재의 디렉토리로 복사, 디폴트는 모든 파일 추출 ar x archiveName { fileName }+

9.5 유닉스 파일 보관 시스템 : AR make 시스템을 이용한 archive 유지 makefile내에 목적 모듈을 대신하여 archive 파일을 선언 할 수 있음 archive 파일의 유지 상태에 따라 makefile이 자동적으로 유지 Archive 순서 정하기 (Solaris 2.6~ 해당 사항 없음) 기본적으로는 순서를 영향을 받지 않음 목적모듈 생성에 있어서 순서에 영향을 받을 경우(구식 시스템) ⇒ loader, tsort를 이용해 archive 파일 내의 순서 정렬 목차(A table of Contents) 생성 (‘no table of content’ 에러 시) (Solaris s.6~ 해당 사항 없음) ranlib : 명시된 archive에 목차를 추가, archive내에 _SYMDEF라는 엔트리를 삽입 ranlib archive +

9.6 유닉스 소스 코드 제어 시스템 : SCCS 소스 코드의 모든 파일에 저장, 접근, 보호 유틸리티 이용 admin : 함수의 초기버전 생성시 sccs 파일 형식으로 저장, 일반적인 편집방식이 안됨 get : 최근의 파일버전을 먼저 검사, 표준형식의 텍스트 파일 생성, 이전 버전 획득 delta : 새버전 완성 시에 sccs 파일로 변환시킴, 새로운 버전의 파일 생성 시에 이전 버전과의 차이만을 저장 (기억장소 최소화) get 으로 반환 전까지는 타인의 접근 제한 sact : 지정된 sccs 파일의 현재 편집활동을 보여줌 help : 에러 발생 시에 메시지 코드 값을 가지고 원인

9.6 유닉스 소스 코드 제어 시스템 : SCCS sccs 파일 생성 파일 검사하기 admin 유틸리티를 사용하여 생성 admin -iname -flname -dllist -ename -aname sccsfile -i name 파일로부터 "s."로 시작되는 sccsfile 이라는 sccs 파일을 생성 -fl 지정된 파일 리스트들을 접근제한 -dl 지정된 파일 리스트들을 접근제한 해지 -e sccs 파일중 편집 버전에 접근 가능 사용자의 목록 추가 -a sccs 파일중 편집 버전에 접근 가능 사용자의 목록 삭제 에러발생시 help 참조 help message + 파일 검사하기 get : sccs 파일로부터 지정 버전 파일의 수정 내용을 검사, 디폴트는 최근 버전 get -e -p -rrevision sccsfile -e 파일이 수정 가능함, delta 로 반환되어야 하고, 그렇지 않으면 읽기 전용으로 반환되지 않음 -p 표준 출력에 표시될 파일을 읽기 전용 복사본 생성

9.6 유닉스 소스 코드 제어 시스템 : SCCS 버전번호 형식 sccs 동작의 모니터링 복사된 파일의 버전번호를 명기해야 하며 디폴트는 1.1 delta를 통해 자동적으로 증가 release.delta (예) $ get -e s.reverse.c 1.1 new delta 1.2 29 lines sccs 동작의 모니터링 scat 명시된 파일과 연관된 현재의 활동목록을 보여줌 현재의 편집활동을 표시 출력파일은 기존이나 새로운 delta 버전, get-c가 실행된 날짜와 시간 포함 scat sccsfile +

9.6 유닉스 소스 코드 제어 시스템 : SCCS 검사 취소 / 파일 반환 unget get의 실행 이전의 상태로 반환 전 상태 sccs 파일로 재 저장하고, 비 sccs 파일을 삭제하고 잠금을 해제함 unget -rrevision -n sccsfile + -r 버전 지정 -n 검사 버전은 남기고, 대신 파일을 복사하게 함 (예) $ scat s.reverse.c No outstanding deltas for : s.reverse.c

9.6 유닉스 소스 코드 제어 시스템 : SCCS 새로운 delta 생성 파일의 히스토리 얻기 delta delta -rrevision -n sccsfile + -r 2개 이상의 구분되는 버전 중 지정 파일만 반환 -n -r 옵션의 기능에 반대 한번에 여러 개의 파일 편집가능 버전을 명시해서 편집 파일의 히스토리 얻기 prs sccs 파일의 히스토리 출력, 디폴트는 모든 히스토리 prs -rrevision sccsfile + -r 버전 지정 출력 형태 : 00000/00000/00000 ⇒ 삽입된 줄 수/삭제된 줄 수/바뀌지 않은 줄 수

9.6 유닉스 소스 코드 제어 시스템 : SCCS sccs 식별 키워드 읽기 전용 복사 파일의 경우 get에 의해 처리하는 특수 문자 소스 프로그램에는 영향이 없으나 소스 파일 앞부분, 주석부분에 위치 현재의 시간 %T% %H% 현재의 날짜 %D% release, delta, branch, seqeuence 번호 %I% 소스코드 파일의 이름 %M% 다음으로 치환 문자열

9.6 유닉스 소스 코드 제어 시스템 : SCCS 이전 버전의 읽기 전용 복사본 검사 버전 삭제 sccs 파일의 압축 (예) $ get -r1.1 s.reverse.c 1.1 23 lines 버전 삭제 rmdel 버전이 잎노드인 경우, sccs 파일로부터 명시된 버전을 삭제 $ rmdel -rrevision sccsfile sccs 파일의 압축 comb sccs 파일을 압축하여 소스의 최근 버전만 포함,필요한 delta 제거, 실제 압축은 Borun 셸 스크립트를 생성함으로 동작(저장 후 실행 할 것) $ comb { sccsfile } +

9.6 유닉스 소스 코드 제어 시스템 : SCCS sccs 파일에 대한 접근 제한 잠금 사용자와 그룹의 접근을 제한 : admin 유틸리티의 -e, -a 옵션을 사용 잠금 편집 방지 : admin 유틸리티의 -fl, -dl의 옵션을 사용

9.7 유닉스 수행 감시기 (Profiler): prof 프로그램 수행에 있어서 함수별 시간 소비 정보 출력 ⇒ 함수 최적화 정보 prof 유닉스 수행 감시기(profiler)로 profileFile의 성능 추적을 기반으로 executableFile내의 각 함수의 반복과 시간표 생성 prof -ln [ executableFile [ profileFile ] ] profileFile 디폴트는 mon.out  cc -p 번역되어야 함 executableFile 디폴트는 a.out -l 이름순으로 정보를 정렬, 디폴트는 시간의 역순으로 나열 -n 축적된 시간에 의하여 정보를 정렬

9.8 이중 검사 프로그램 : lint C 프로그램을 cc 보다 완전하게 프로그램을 검사 지정된 소스 파일을 스캔하여, 발견된 모든 잠재적 오류를 출력 lint { fileName } * 모듈 화된 프로그램을 검사 시에, 모든 소스를 지정하면 모듈간의 상호작용까지 검사 multi.incheon.ac.kr에서 splint 이용 가능

9.9 유닉스 디버거 : gdb 프로그램을 기호적으로 디버깅 : dbx, adb, sdb, gdb, ddd(Motif) 등 단일단계이동(single stepping) 정지점(breakpoint) 디버거 내에서 편집 변수의 접근 및 수정 함수의 탐색 추적(tracing) gdb GNU debugger, 별도의 프롬프트 표시 관련정보는, 프롬프트에서 help를 입력 dbx executableFilename 디버그를 위한 프로그램 준비 cc 또는 gcc의 -g 옵션으로 프로그램을 번역 ⇒ 목적 모듈 내에 디버깅 정보 포함

9.9 유닉스 디버거 : gdb gdb 실행 % gdb 실행파일이름 gdb 명령어 b (breakpoint) : 실행 중 디버그를 위해 멈추는 위치 지정 b 함수명 : 함수명에서 멈춤 b 라인번호 : 라인번호에서 멈춤 r (run) : 실행 시작 n (next) : 현재 라인 실행 (함수의 경우 실행하고 다음 라인으로 넘어 감) s (step) : 현재 라인 실행 (함수의 경우 호출된 함수 내로 들어가 실행 계속) c (continue) : 다음 breakpoint까지 실행 l (list) : 현재 수행되고 있는 라인부터 10개 라인씩 연속적으로 소스 코드를 프린트 p (print) 변수명 : 변수명으로 저장되어 있는 내용을 프린트 h (help) : 도움말 q (quit) : gdb 종료 

9.10 작업 완료 후 : strip 저장 공간 확보 디버거나 수행감시 유틸리티 수행 후에 추가 되는 특별한 코드들 제거 심볼 테이블과 재배치, 디버깅, 프로파일링 정보를 명명된 파일들로부터 제거 strip { fileName }+

과제…12월 9일(월)까지 [과제 1] 교재 p425 연습문제 1 [과제 2] multi.inchon.ac.kr(211.119.245.149) ~mysung/2002prog/cprog에 있는 화면단위로 화일 내용을 출력하는 p 프로그램 가져와서 upgrade % p 화일이름 버전1: 페이지당 줄 수를 명령 줄로부터 입력 받아 변수 pagesize에 지정 % p -n 버전2: 이전의 입력 부분을 재 출력하는 기능을 추가 ( ‘b’ 등의 입력으로 이전출력) 과제 제출 방법 Electrical Version : multi.inchon.ac.kr (211.119.245.149)의 ~mysung/2002unix/에 자신의 학번으로 디렉토리 만들고 그 안에 복사 Paper Version : 종이에 소스와 실행 과정 및 결과 출력하여 제출 Unix 시스템의 루트 활용 권한 부여 받을 사람 지원하세요!