• 시스템 프로그래밍 C.1

    2021. 5. 28.

    by. 공상개발

    # 프로그램 작성과 실행

     

    리눅스 시스템 프로그래밍

    • 리눅스에서 제공하는 시스템 콜들을 사용하여 시스템 관리나 운영을 위한 프로그램

     

    시스템 프로그램의 작성과 실행

    •  편집기(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.c

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    hjw@Desktop:~/work/ch6$ ls
    p6_1.c
    hjw@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.c
    hjw@Desktop:~/work/ch6$ ls
    p6_1  p6_1.c
    hjw@Desktop:~/work/ch6$ ./p6_1
    Hellohjw@Desktop:~/work/ch6$ 
    cs

     

     

    명령라인 인수
    쉘의 명령 라인에 주어지는 인수
    프로그램의 main() 함수에 인수로 주어진다.
    main() 함수의 형식

    int main(int argc, char *argv[]);
    예) $ mycmd aaa bbb ccc

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    hjw@Desktop:~/work/ch6$ ls
    p6_1  p6_1.c  p6_2.c  p6_3  p6_3.c
    hjw@Desktop:~/work/ch6$ gcc -o p6_2 p6_2.c
    hjw@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 ccc
    argc = 4
    argv[0= ./p6_2
    argv[1= aaa
    argv[2= bbb
    argv[3= ccc
     
    cs
     

     

    헤더 파일

    C 언어의 각종 상수나 타입 정의, 함수의 프로토타입을 정의한 파일

    /usr/include 디렉토리 아래에 있다.



    라이브러리

    /lib/i386-linux-gnu 혹은 /lib/x86_64-linux-gnu 디렉토리 아래에 있다.

    C 언어의 표준 라이브러리 : libc-2.17.so
    표준 라이브러리에 포함되지 않는 함수를 사용할 때에는 컴파일 옵션으로 지정해 주어야 함
    예) libm-2.17.so 에 포함된 함수를 이용할 때에는 –lm 옵션을 주어야 한다.

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    hjw@Desktop:~/work/ch6$ ls
    p6_1  p6_1.c  p6_2  p6_2.c  p6_3.c
    hjw@Desktop:~/work/ch6$ gcc -o p6_3 p6_3.c -lm
    hjw@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*+ h*h);
     
        printf("빗변 = %f\n", r);
    }
    hjw@Desktop:~/work/ch6$ ./p6_3
    밑변과 높이를 입력하시오: 5 3
    빗변 = 5.830952
     
    cs

     

     

    문자열 처리 함수

    <string.h>

    함수 설명
    strlen(s) 문자열 s의 길이를 구한다.
    strcpy(s1, s2) s2s1에 복사한다.
    strcat(s1, s2) s2s1의 끝에 붙인다.
    strcmp(s1, s2) s1s2를 비교한다.
    strchr(s, c) 문자열 s안에서 문자 c를 찾는다.
    strstr(s1, s2) 문자열 s1에서 문자열 s2를 찾는다.
    char *strtok(s, delim) 문자열 sdelim를 이용하여 토큰으로 분리한다.
    sscanf(s, ...) 문자열 s로부터 지정된 형식으로 값을 읽어서 변수에 저장한다.
    sprintf(s, ...) 변수의 값을 지정된 지정자에 따라 문자열 형태로 문자 배열 s에 저장한다.
    strtol(ptr, eptr, base) ptr의 문자열을 정수로 변환한다.

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    hjw@Desktop:~/work/ch6$ ls
    p6_1  p6_1.c  p6_2  p6_2.c  p6_3  p6_3.c  p6_4.c
    hjw@Desktop:~/work/ch6$ gcc -o p6_4 p6_4.c
    hjw@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_4
    token #0 ==> test
    token #1 ==> string
    token #2 ==> to
    token #3 ==> extract
    token #4 ==> token
     
    cs

     

    '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

    댓글