0w0
시스템 호출? ex1_1.c ex1_2.c 본문
시스템 호출
시스템 호출은 커널의 해당 모듈을 직접 호출해 작업하고 결과를 리턴한다.
커널, 즉 시스템을 직접 호출하기 때문에 시스템 호출이라고 하는 것이다.
라이브러리 함수는 오류가 발생할 경우 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]$
'Coding > System Programming' 카테고리의 다른 글
저수준 파일 입출력 (0) | 2016.10.06 |
---|---|
명령행 인자 출력 ex1_6.c ex1_7.c (0) | 2016.09.28 |
동적 메모리 할당 malloc realloc (0) | 2016.09.28 |
오류 처리 함수 perror함수, str-error함수 (0) | 2016.09.27 |
Makefile과 make ex1_3_main.c ex1_3_addnum.c (0) | 2016.09.27 |