0w0

시스템 호출? ex1_1.c ex1_2.c 본문

Coding/System Programming

시스템 호출? ex1_1.c ex1_2.c

0w0 2016. 9. 27. 21:42
728x90
반응형

시스템 호출

시스템 호출은 커널의 해당 모듈을 직접 호출해 작업하고 결과를 리턴한다.

커널, 즉 시스템을 직접 호출하기 때문에 시스템 호출이라고 하는 것이다.


라이브러리 함수는 오류가 발생할 경우 NULL을 리턴한다. 물론 함수의 리턴값이 int형일 경우 -1을 리턴한다. 


man 페이지 위치

일반적인 명령에 관한 설명 : 섹션 1

시스템 호출 : 섹션 2

라이브러리 함수 : 3


소스


[3210w0@localhost source]$ cat ex1_1.c 

//시스템 호출 오류 처리하기


#include<stdio.h>

#include<unistd.h>

#include<errno.h>


extern int errno;                   

/*errno는 <errno.h>에 정의되어 있는 광역 변수거나 시스템에 따라서 매크로이기도 한 값입니다. 이 errno은 라이브러리 함수 실행 중 에러가 발생하면 어떠한 에러가 발생했는지 체크하고자 확인하는 용도로 사용됩니다. 즉 해당 errno를 외부에서 불러오는 것인다.*/


int main(void){

if(access("unix.txt",F_OK)==-1){     

/*.access() 함수는 파일 또는 디렉토리의 사용자 권한을 체크합니다.

R_OK : 파일 존재 여부, 읽기 권한 여부

W_OK : 파일 존재 여부, 쓰기 권한 여부

X_OK : 파일 존재 여부, 실행 권한 여부

F_OK : 파일 존재 여부    */       

printf("errno=%d\n",errno);    //.access() 함수의 결과 값은 int형으로 성공하면 0을, 실패하면 -1을 반환합니다.

}

return 0;

}


실행 결과


[3210w0@localhost source]$ gcc -o ex1_1 ex1_1.c 

[3210w0@localhost source]$ ./ex1_1

errno=2

[3210w0@localhost source]$ 






소스


[3210w0@localhost source]$ cat ./ex1_2.c

//라이브러리 함수 오류 처리하기


#include<stdio.h>

#include<stdlib.h>

#include<errno.h>


extern int errno;


int main(void){

        FILE *fp;


        if((fp=fopen("unix.txt","r"))==NULL){

/*fopen을 사용해서 unix.txt 파일을 열경우 파일이 존재하지 않으므로 오류가 발생해 NULL을 리턴한다.*/

                printf("errno=%d\n",errno);

                exit(1);

        }

        fclose(fp);


        return 0;

}


실행 결과

[3210w0@localhost source]$ ./ex1_2

errno=2

[3210w0@localhost source]$ 



728x90
반응형
Comments