Download presentation
Presentation is loading. Please wait.
1
Homework 7… 마지막 수업시간까지 (실습) 매개변수로 입력 받아 처리할 수 있도록 수정해 보세요
(A반) 1 부터 9 까지의 숫자를 입력 받아 입력 받은 라인의수 만큼 피라미드를 출력하는 코드 pyramid.c 를 작성하세요 (단, 공백 1칸의 크기는 별1개의 크기와 같다) (예) $ ./pyramid 출력할 피라미드의 라인 수를 입력하세요 : 3[Enter] * *** ***** (B반) 1 부터 입력 받은 수까지 짝수의 합을 출력하는 코드 evensum.c를 작성하세요 (예) $ ./evensum 값을 입력하세요 : 10[Enter] 짝수의 합 = 30 (C반) 숫자,연산자,숫자의 순으로 입력하여 사칙연산( +, -, /, * )을 수행하는 계산기 코드 calc.c를 작성하세요 (예) $ ./calc 계산식을 입력하세요 : 3*4[Enter] 3 * 4 = 12 화면단위로 화일 내용을 출력하는 p.c 프로그램의 개선(upgrade) 버전1과 버전2를 제출하세요 $ p 화일이름 버전1: 페이지당 줄 수를 명령 줄로부터 입력 받아 변수 pagesize에 지정 $ p1 -n 화일이름 버전2: 이전의 입력 부분을 재 출력하는 기능을 추가 ( ‘b’ 입력으로 이전 출력) $ p2 -n 화일이름 명령 줄에서 정수형 인수 n을 취하여 n개의 child 프로세스를 생성하여 각 프로세스는 “I am the child process PID(1234)" 등으로 자신의 프로세스 번호를 출력하고 종료하는 C 언어 프로그램 ncproc.c를 작성하여 실행파일과 함께 숙제방에 제출하세요 Unix/Linux
2
과제 제출 방법 Electrical Version1 Electrical Version2
fedora.incheon.ac.kr ( ): /home/ul2011hwa 또는 ul2011hwb 또는 ul2011hwc에 자신의 학번으로 숙제방(디렉토리) 만들고 그 안에 복사 자신의 디렉토리 보호 권장: chmod directoryname Electrical Version2 multi.incheon.ac.kr ( ): /export/home/ul2011hwa 또는 ul2011hwb 또는 ul2011hwc에 자신의 학번으로 숙제방(디렉토리) 만들고 그 안에 복사 컴퓨터 사이의 파일 복사는 ftp 를 이용하세요! Unix/Linux
3
p.c C programming /* Solaris BUFSIZ /usr/include/iso/stdio_iso.h
#include <stdio.h> #define PAGESIZE 22 char *progname ; /* 오류 메시지에 사용될 프로그램 이름 */ main(argc, argv) int argc ; char *argv[] ; { int i ; FILE *fp, *efopen(); progname = argv[0] ; if(argc == 1) print((char *)stdin, PAGESIZE); else for (i = 1 ; i < argc ; i++) { fp = efopen(argv[i], "r"); print(fp, PAGESIZE); fclose(fp); } exit(0); FILE *efopen(file, mode) /* fopen으로 화일을 open 할 수 없으면 종료함 */ char *file, *mode ; FILE *fp, *fopen(); extern char *progname ; if((fp = fopen(file, mode)) != NULL) return fp ; fprintf(stderr, "%s : can't open file %s mode %s \n", progname, file, mode); exit(1); print(fp, pagesize) /*페이지 크기 단위로 fp를 출력 */ FILE *fp ; int pagesize ; { static int lines = 0 ; /* 지금까지 줄 수 */ char buf[BUFSIZ] ; while (fgets(buf, sizeof buf, fp) != NULL) if(++lines < pagesize) fputs(buf, stdout); else { buf[strlen(buf)-1] = '\0' ; fflush(stdout); ttyin(); lines = 0 ; } ttyin() /* /dev/tty에서의 응답 처리 (1버전) */ FILE *efopen(); static FILE *tty = NULL ; if(tty == NULL) tty = efopen("/dev/tty", "r"); if(fgets(buf, BUFSIZ, tty) == NULL || buf[0] == 'q') exit(0); else /* 정상 입력 */ return buf[0] ; /* Solaris BUFSIZ /usr/include/iso/stdio_iso.h #define BUFSIZ */ /* Linux BUFSIZ /usr/include/stdio.h #define BUFSIZ _IO_BUFSIZ #include <libio.h> /usr/include/libio.h #define _IO_BUFSIZ _G_BUFSIZ #include <_G_config.h> /usr/include/_G_config.h #define _G_BUFSIZ */ C programming
4
유닉스 디버거 : gdb 프로그램을 기호적으로 디버깅 : dbx, adb, sdb, gdb, ddd(Motif) 등 gdb
단일단계이동(single stepping) 정지점(breakpoint) 디버거 내에서 편집 변수의 접근 및 수정 함수의 탐색 추적(tracing) gdb GNU debugger, 별도의 프롬프트 표시 관련정보는, 프롬프트에서 help를 입력 dbx executableFilename 디버그를 위한 프로그램 준비 cc 또는 gcc의 -g 옵션으로 프로그램을 번역 ⇒ 목적 모듈 내에 디버깅 정보 포함 C programming
5
유닉스 디버거 : 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 종료 C programming
6
(C언어 보충) Command-line Arguments
$ echo hello world Output hello, world argc 와 argv[] argc=3 argv[0]: “echo” argv[1]: “hello” argv[2]: “world” Source code $ cat echo.c #include <stdio.h> main(int argc, char *argv[]) { int i; for (i = 1; i < argc; i++) printf(“%s%s”, argv[i], (i < argc-1) ? “ “ : “”); printf(“\n”); return 0; } argv: argv[0] echo\0 argv[0][0] ? argv[1] hello\0 argv[1][0] ? argv[2] world\0 argv[2][0] ? argv[3] C programming
Similar presentations