-
# 프로그램 작성과 실행
리눅스 시스템 프로그래밍
- 리눅스에서 제공하는 시스템 콜들을 사용하여 시스템 관리나 운영을 위한 프로그램
시스템 프로그램의 작성과 실행
- 편집기(gedit, nano 등)를 사용해서 C 언어로 프로그램을 작성
- 컴파일러(gcc)로 컴파일하여 실행 파일 생성
- 실행
gcc의 파일 이름 규칙
. c C 언어로 작성된 프로그램의 소스 파일
. h C 프로그램의 헤더 파일
. cpp C++ 프로그램의 소스 파일
. asm 어셈블리 언어로 작성된 프로그램의 소스 파일
. obj 컴파일러가 작성한 기계어 프로그램 파일
옵션 없이 컴파일하였을 때 디폴트로 생성되는 실행 파일 이름은 a.out
컴파일
$ gcc prog1.c # a.out 생성 or $ gcc –o prog1 prog1.c # prog1 생성
프로그램 실행
$./prog1.c123456789101112131415161718hjw@Desktop:~/work/ch6$ lsp6_1.chjw@Desktop:~/work/ch6$ cat p6_1.c// File : p6_1.c#include <stdio.h>int main(void){printf( "Hello" );return 0;}hjw@Desktop:~/work/ch6$ gcc -o p6_1 p6_1.chjw@Desktop:~/work/ch6$ lsp6_1 p6_1.chjw@Desktop:~/work/ch6$ ./p6_1Hellohjw@Desktop:~/work/ch6$cs 명령라인 인수
쉘의 명령 라인에 주어지는 인수
프로그램의 main() 함수에 인수로 주어진다.
main() 함수의 형식
int main(int argc, char *argv[]);
예) $ mycmd aaa bbb ccc1234567891011121314151617181920212223242526hjw@Desktop:~/work/ch6$ lsp6_1 p6_1.c p6_2.c p6_3 p6_3.chjw@Desktop:~/work/ch6$ gcc -o p6_2 p6_2.chjw@Desktop:~/work/ch6$ cat p6_2.c// File : p6_2.c#include <stdio.h>int main(int argc, char *argv[]){int i;printf("argc = %d\n", argc);for (i = 0; i < argc; i++) {printf("argv[%d] = %s\n", i, argv[i]);}return 0;}hjw@Desktop:~/work/ch6$ ./p6_2 aaa bbb cccargc = 4argv[0] = ./p6_2argv[1] = aaaargv[2] = bbbargv[3] = ccccs 헤더 파일
C 언어의 각종 상수나 타입 정의, 함수의 프로토타입을 정의한 파일
/usr/include 디렉토리 아래에 있다.
라이브러리
/lib/i386-linux-gnu 혹은 /lib/x86_64-linux-gnu 디렉토리 아래에 있다.
C 언어의 표준 라이브러리 : libc-2.17.so
표준 라이브러리에 포함되지 않는 함수를 사용할 때에는 컴파일 옵션으로 지정해 주어야 함
예) libm-2.17.so 에 포함된 함수를 이용할 때에는 –lm 옵션을 주어야 한다.123456789101112131415161718192021222324hjw@Desktop:~/work/ch6$ lsp6_1 p6_1.c p6_2 p6_2.c p6_3.chjw@Desktop:~/work/ch6$ gcc -o p6_3 p6_3.c -lmhjw@Desktop:~/work/ch6$ cat p6_3.c// File p6_3.c#include <stdio.h>#include <math.h>int main(int argc, char *argv[]){double w, h, r;printf("밑변과 높이를 입력하시오: ");scanf("%lf %lf", &w, &h);r = sqrt(w*w + h*h);printf("빗변 = %f\n", r);}hjw@Desktop:~/work/ch6$ ./p6_3밑변과 높이를 입력하시오: 5 3빗변 = 5.830952cs 문자열 처리 함수
<string.h>
함수 설명 strlen(s) 문자열 s의 길이를 구한다. strcpy(s1, s2) s2를 s1에 복사한다. strcat(s1, s2) s2를 s1의 끝에 붙인다. strcmp(s1, s2) s1과 s2를 비교한다. strchr(s, c) 문자열 s안에서 문자 c를 찾는다. strstr(s1, s2) 문자열 s1에서 문자열 s2를 찾는다. char *strtok(s, delim) 문자열 s를 delim를 이용하여 토큰으로 분리한다. sscanf(s, ...) 문자열 s로부터 지정된 형식으로 값을 읽어서 변수에 저장한다. sprintf(s, ...) 변수의 값을 지정된 지정자에 따라 문자열 형태로 문자 배열 s에 저장한다. strtol(ptr, eptr, base) ptr의 문자열을 정수로 변환한다. 1234567891011121314151617181920212223242526272829303132hjw@Desktop:~/work/ch6$ lsp6_1 p6_1.c p6_2 p6_2.c p6_3 p6_3.c p6_4.chjw@Desktop:~/work/ch6$ gcc -o p6_4 p6_4.chjw@Desktop:~/work/ch6$ cat p6_4.c// File : p6_4.c#include <stdio.h>#include <string.h>int main(void){char str[] = "test string to extract token";char delim[] = " \t\n";char *token;int i = 0;token = strtok(str, delim);while (token != NULL) {printf("token #%d ==> %s\n", i, token);i++;token = strtok(NULL, delim);}return 0;}hjw@Desktop:~/work/ch6$ ./p6_4token #0 ==> testtoken #1 ==> stringtoken #2 ==> totoken #3 ==> extracttoken #4 ==> tokencs 'Computer Science > Linux' 카테고리의 다른 글
시스템 관리 (2) (0) 2021.06.01 시스템 프로그래밍 C.2 (0) 2021.05.28 시스템 관리 (1) (0) 2021.05.25 쉘 프로그래밍 명령어 모음 3 (0) 2021.05.11 쉘 프로그래밍 명령어 모음 2 (0) 2021.05.11 댓글