본문 바로가기
UNIX 프로그래밍

[1주차 실습] UNIX 실습 문제

by 서영선 2023. 10. 15.

 

1. vi editor 실습 : 다음 프로그램을 편집하여 컴파일한 후 실행시킵니다. 프로그램 파일 이름은 test1.c 로 실행 파일 이름은 test1으로 합니다. vi editor의 다양한 명령을 사용하는 연습을 해 보세요.

 

해당 코드는 5개의 id와 이름을 입력받으면 data 파일에 id +5 한 값과 이름을 저장하는 코드이다.

< 입력 >
1 John
2 Jane
3 Mike
4 Sarah
5 David

 

< 출력 >

ls를 통해 생성된 data 파일을 확인할 수 있다. vi data를 통해 출력 값을 확인하면

data 파일에 값이 잘 저장된 것을 확인할 수 있다.

 

 

 

 

2. 함수 사용 실습 : 위 프로그램에 함수 add_five()를 추가합니다. add_five() 함수는 data[i].id의 값을 받아, 5를 더한 정수값을 return 합니다. 새 프로그램 파일은 test2.c로 이름을 붙이고, test1.c 파일을 복사한 후 편집 하세요.

 

> cp test1.c test2.c

를 통해 파일을 복사한다.

 


#include <stdio.h>

struct st{
        int id;
        char name[30];
};

int add_five(data){
        return data+5;
}

int main(void){
        FILE *fp;
        int i;
        struct st data[5];

        fp=fopen("data", "w");

        for(i=0;i<5;i++){
                scanf("%d", &data[i].id);
                scanf("%s", &data[i].name);
        }


        for(i=0;i<5;i++){
                data[i].id = add_five(data[i].id);
        }

        for(i=0;i<5;i++){
                fprintf(fp, "%-5d", data[i].id);
                fprintf(fp, "%-5s\n", data[i].name);
        }

        return 0;
}

 

 

 

 

3. 포인터 사용 연습 : test2.c 파일을 복사하여 test3.c 프로그램 파일을 만듭니다. main() 함수에서 add_five() 함수로 데이터의 값이 아니라 포인터를 넘겨주는 연습을 합니다. 단, 배열 전체가 아니라 배 열의 원소 하나씩 포인터로 전달합니다. 이 경우, return 값은 없습니다.

 

>cp test2.c test3.c

 

#include <stdio.h>

struct st{
        int id;
        char name[30];
};

int add_five(int * data){
        *data = *data + 5;
}

int main(void){
        FILE *fp;
        int i;
        struct st data[5];

        fp=fopen("data", "w");

        for(i=0;i<5;i++){
                scanf("%d", &data[i].id);
                scanf("%s", &data[i].name);
        }

        for(i=0;i<5;i++){
                add_five(&data[i].id);
        }

        for(i=0;i<5;i++){
                fprintf(fp, "%-5d", data[i].id);
                fprintf(fp, "%-5s\n", data[i].name);
        }

        return 0;
}

 

 

 

 

 

4. 배열 포인터 사용 연습 : test3.c 파일을 복사하여 test4.c 프로그램 파일을 만듭니다. main() 함수에 서 add_five() 함수로 배열 포인터를 넘겨주는 연습을 합니다. 배열 전체의 포인터가 전달되었으므로 반 복문은 main() 함수가 아니라 add_five() 함수에서 필요하며, 이 경우에도 return 값은 없습니다.

 

 

#include <stdio.h>

struct st{
        int id;
        char name[30];
};

int add_five(struct st * data){

        int i;
        for(i=0; i<5; i++){
                (data+i)->id +=5;
        }
}

int main(void){
        FILE *fp;
        int i;
        struct st data[5];

        fp=fopen("data", "w");

        for(i=0;i<5;i++){
                scanf("%d", &data[i].id);
                scanf("%s", &data[i].name);
        }

        add_five(data);

        for(i=0;i<5;i++){
                fprintf(fp, "%-5d", data[i].id);
                fprintf(fp, "%-5s\n", data[i].name);
        }

        return 0;
}

 

 

 

5. home directory에 “LAB09-05“ directory를 만든 후, 1번, 2번, 3번, 4번에서 만든 파일들을 ”LAB09-05“ directory로 옮깁니다.

 

> mkdir LAB09-05

> mv test1.c ./LAB09-05 

> mv test2.c ./LAB09-05

> mv test3.c ./LAB09-05

....

 

6. ”LAB09-05“ directory의 파일 중 프로그램 파일에는 0644, 실행파일에는 0755의 access permission을 부여합니다.

 

> chmod 0644 test1.c

> chmod 0755 test1

....

 

 

7. ”LAB09-05“ 내의 test4.c 파일의 이름을 학번.c로 변경한 후, 지정된 directory로 복사한 후, ls와 cat 명령을 사용해 복사가 정상적으로 실행되었는지 확인합니다

 

> cd LAB09-05

> cp test4.c 학번.c

> cp ./../../unix/UNIX23/LAB09-05

 

 

 

 

실습(9월5일) (1).pdf
0.03MB

 

 

 

 

 

 

 

 

 

 

 

댓글