1 / 22

학습 내용

학습 내용. 리눅스 기본 명령어 ( 개별 학습 ) 실습 관련 기본 사항 실습 계정 기본 툴 (zterm, editplus 등 ) 리눅스 컴파일 및 실행 방법 C 언어 학습 I 포인터 관련 ( 개념 , 연산자 , 배열 및 포인터 등 ) main 함수에서의 인수 전달. UNIX(LINUX) 기본 명령어. 기본 명령어 파일 관련 (ls, cp, mv, rm, ln) 디렉토리 관련 (cd, pwd, mkdir, rmdir ) 기타 (cat, more, find, grep, |, >)

deepak
Download Presentation

학습 내용

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 학습 내용 • 리눅스 기본 명령어(개별 학습) • 실습 관련 기본 사항 • 실습 계정 • 기본 툴(zterm, editplus 등) • 리눅스 컴파일 및 실행 방법 • C언어 학습 I • 포인터 관련(개념, 연산자, 배열 및 포인터 등) • main 함수에서의 인수 전달

  2. UNIX(LINUX) 기본 명령어 • 기본 명령어 • 파일 관련 (ls, cp, mv, rm, ln) • 디렉토리 관련(cd, pwd, mkdir, rmdir ) • 기타(cat, more, find, grep, |, >) • 파일 모드 및 사용자 관련(chmod, chown) • 프로세스 관련(ps, kill) • 편집기(vi) 및 C 컴파일러(cc) 사용법 • ftp 관련 명령어 • get, put, mget, mput, bin, asc, prompt

  3. 관리자 명령어 • 사용자 계정관리 • 데몬 관리 • 프로그램 설치/제거 관련(rpm, tar) • 네트워크 설정 관련(ifconfig, 설정파일) • 기타 데몬(서비스) 설정 • 서버 설치 및 운영(www, ftp, mail, samba 등) • 커널 컴파일 및 업그레이드

  4. 기초 C 언어 • C 기본 구조 • 기초 입출력 함수(printf(), scanf()) • 할당문, 사칙 연산 • 기초 자료형 및 변수 선언 • if, switch문 • for, while, do-while • 배열 • 사용자 정의함수 • 기초 내장(표준)함수 활용(atoi, itoa, sizeof, strlen, strcpy, fgetc, fgets 등)

  5. 중급 C 언어 • 포인터 • 명령행 인수 활용 • 구조체, 구조체 포인터 • 파일 입출력 • 동적 메모리 활용 • 링크리스트 등의 자료구조 활용 • 시스템 관련 처리 • 프로세스 및 스레드 관리 • 타이머 처리 • 시그널 처리 등

  6. Linux 프로그래밍 절차 • 편집(editing) • vi, ed로 직접 편집 • 또는 PC에서 편집 후, ftp로 전송 • EditPlus 등의 원격 문서편집기 사용 • 컴파일 • 형식 : cc –o 실행파일명 소스파일명 • 예: $ cc -o test test.c • 실행 • 예: $ ./test

  7. 실습 기본 사항 • 기초 실습서버: (리눅스 시스템, IP:203.232.244.50) • 사용 툴: zterm(텔넷 프로그램), Editplus(원격문서편집기) • 실습서버(203.232.245.35) 계정 • 현재 info1 ~ info10 까지의 실습용 계정이 있음 • PASSWORD: ID와 동일 • PC 상에서 zterm 실행해서 로그인 해보기 바람

  8. 프로그램 실행 1 • 다음과 같은 소스 프로그램을 vi 편집기를 이용하여 편집, 컴파일 실행해 보시오. #include <stdio.h> int main(void) { printf(“\n\n Network Programming \n\n”); return 0; }

  9. 프로그램 실행 2 • 다음과 같은 소스 프로그램을 vi 편집기를 이용하여 편집, 컴파일 실행해 보시오. #include <stdio.h> int main(void) { int i, data[5], sum=0; for(i=0; i<5; i++) scanf(“%d”, &a[i]); for(i=0; i<5; i++) sum+=a[i]; printf(“\n Sum = %d”, sum); return 0; }

  10. 프로그램 실습 1 • Editplus 사용 • [파일] 메뉴에서 [FTP] -> [FTP 설정] 메뉴를 이용하여, 자신의 계정을 생성 • 현재 PC에서 작성한 문서는 [파일]->[FTP]->[원격저장] 메뉴 등을 사용할 것 • 실습문제: 앞의 정수형 배열 문제에서 입력된 숫자 중 가장 큰 숫자를 찾아서 출력하는 프로그램을 작성하시오.

  11. 메모리 번지 0 1 … ….. q XXX(값) 100 p 100(번지) 포인터 개념 • 포인터는 다른 개체(변수)의 메모리 주소를 저장하는 변수이다. • 포인터 변수 p가 q라는 다른 변수의 주소를 저장하고 있다면, p는 q를 가르킨다라고 한다. 즉 q가 메모리 100번지에 있다면 p의 실제 값은 100이 된다.

  12. 포인터 선언 및 연산자 • 포인터의 선언 • 형식 : [데이터 형] * 변수이름 • [데이터 형] : 포인터가 가르키는 개체(변수)의 데이터 형 • 예) int *p; -> 정수형 데이터의 주소를 가질수 있는 포인터 변수 p를 선언 • 포인터 연산자 • * : 뒤에 오는 피연산자(주로 포인터)의 주소에 들어 있는 값을 반환 • & : 뒤에 오는 피연산자(주로 변수)의 주소를 반환 • 예) *p : p라는 포인터 변수의 주소에 들어있는 값 &q : q라는 변수가 들어있는 메모리 주소

  13. 예제 #include <stdio.h> int main(void) { int *p, q; p = &q; *p = 200; printf(“%d”, q); return 0; } #include <stdio.h> int main(void) { int *p, q; q = 100; p = &q; printf(“%d”, *p); return 0; }

  14. 포인터 식 • 포인터에 수행할 수 있는 연산자: *, &, +, ++, -, -- • +, - 등의 산술 연산자는 정수와만 가능 • i = *(p+2); -> 가능 • i = *(p+2.5); -> 불가능 • 포인터의 증가, 감소는 포인터가 가르키는 데이터 형과 밀접한 관계가 있다. • p가 short형 포인터이고 현재 200번지를 가르킨다면, p++ 수행 이후의 p 값은 202가 된다. • 만약 p가 float형 포인터면 204가 된다. • p가 char형이면 당연히 201이 된다. • *p++ : 포인터를 하나 증가시킨 다음, 그 번지에 들어 있는 값, 즉 연산자 우선순위 상 *(p++)와 동일 • (*p)++ : 포인터 번지에 들어있는 값을 하나 증가시킨다.

  15. 배열과 포인터 • 포인터와 배열은 매우 밀접한 관계를 가지며, 종종 서로 혼용해서 사용 가능하다. • 배열의 이름은 배열의 시작 부분에 대한 포인터 상수가 된다.즉 배열이름은 배열이 저장되는 시작 주소가 된다. • 예 #include <stdio.h> int main(void) { int a[5] = {1,2,3,4,5}; /* 결국 a = &(a[0]) */ int *p; p = a; printf(“\n%d %d %d”, *p, *(p+1), *(p+2)); printf(“\n%d %d %d”, a[0], a[1], a[2]); return 0; }

  16. 메모리 번지 0 1 … ….. ch 100 ‘A’ ….. p 100 200 ….. mp 200 다중 포인터 • 포인터가 다른 포인터를 가르키는 것이 가능하다. • 예) char **mp, *p, ch; p = &ch; mp = &p; **mp = ‘A’;

  17. #include <stdio.h> int array_sum(int* , int); int main(void) { int a[5], i, sum; for(i=0; i<5; i++) scanf("%d",&a[i]); sum = array_sum(a, 5); printf("Array Sum : %d", sum); return 0; } int array_sum(int *array, int count) { } • 예제 1)정수 배열에 있는 데이터의 총합을 구하는 예제를 완성하시오.

  18. 실습 예제 1)정수 배열에 들어 있는 값 중에서 최고 값을 구하는 프로그램의 앞의 예제와 흡사하게 사용자 정의 함수 형식으로 작성하시오. 실습 예제 2)입력한 문자열의 문자 갯수를 구하는 프로그램을 앞의 예제와 흡사하게 사용자 정의 함수로 만드시오.

  19. 명령어 라인(main함수) 인수 • 명령어 라인 인수란 운영체제에 명령어 라인에서 실행 프로그램 이름 뒤에 사용하는 정보를 말한다. • 예를 들어 유닉스(리눅스)에서 “cat test.c”라고 입력하면 cat이라는 프로그램은 명령어 인수에서 test.c를 전달 받아야 한다. • C언어에서 명령어 라인 인수는 main 함수의 두개의 인수(argc, argv)로 넘겨진다. • 두 인수의 데이터 형 • int argc : 인수의 개수(프로그램 이름 포함) • char *argv[] : 인수의 내용이 문자열 포인터 배열로 argv[0] : 프로그램 이름 argv[1] : 첫번째 인수 내용, …

  20. 명령어 라인 인수 예제 #include <stdio.h> int main(int argc, char *argv[]) { int i; printf("\n Count of arguments : %d", argc); printf("\n Contents of arguments : "); for(i=0; i<argc;i++) printf(“\n\t argv[i]: %s ",i, argv[i]); return 0; } 결과 [leewj@HA] ./test network program Count of arguments : 3 Contents of arguments : argv[0]: ./test argv[1]: network argv[2]: program

  21. 명령어 라인 인수 예제 결과 [leewj@HA] ./test 10 20 Max value: 20  참고: 인수(argv[i]) 는 모두 문자열로 입력되므로 숫자로 처리하기 위해서는 atoi() 등의 문자로 된 숫자열을 정수 등 으로 변환하는 표준함수를 사용한다.(#include stdlib) #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int i; if (argc != 3) { printf(“\n argc value is not 3 \n); exit(1); } if (atoi(argv[1]) >= atoi(argv[2])) printf(“Max value: %d ", atoi(argv[1])); else printf(“Max value: %d ", atoi(argv[1])); return 0; }

  22. 명령행 인수 실습 예제 • 명령어 인수로 넘어오는 숫자들(몇 개이든)의 총합을 출력하는 프로그램을 작성하시오. C:\> sum 10 20 30 total : 60 • 주의 : 앞의 예제와 같이, 인수는 무조건 문자열로 넘어옴으로 이를 숫자로 변환해서 계산해야 한다. 다음의 함수를 이용하시오.(이들 함수를 사용하기 위해서는 stdio.h 이외 stdlib.h를 include해야 한다. • int atoi(char *str); • double atof(char *str); • char *itoa(int *a); …

More Related