Manpages

이 름

intro − 시 스 템 콜 에 대 한 소 개

설 명

여 기 서 는 리 눅 스 시 스 템 콜 을 설 명 한 다 . 리 눅 스 2.0에 있 는 164개 의 시 스 템 콜 의 목 록 은 syscalls(2)를 보 아 라 .

직 접 호 출 하 기
대 부 분 의 경 우 , 시 스 템 콜 을 직 접 호 출 할 필 요 는 없 지 만 , 당 신 에 게 필 요 한 함 수 가 표 준 C 라 이 브 러 리 에 구 현 되 지 않 는 경 우 도 있 다 .

사 용 법
#include <linux/unistd.h>

_syscall 매 크 로

원 하 는 시 스 템 콜

설 정
시 스 템 콜 에 대 해 알 아 야 하 는 중 요 한 사 항 은 프 로 토 타 입 이 다 . 인 자 의 개 수 , 인 자 의 타 입 과 함 수 리 턴 타 입 을 알 필 요 가 있 다 . 시 스 템 으 로 의 실 제 적 인 호 출 을 더 쉽 게 해 주 는 6개 의 매 크 로 가 있 다 . 다 음 과 같 은 형 식 이 다 :

_syscallX(type,name,type1,arg1,type2,arg2,...)

X는 0–5, 시 스 템 콜 이 취 하 는 인 자 의 개 수 이 다 . system call

type는 시 스 템 콜 의 리 턴 타 입

name는 시 스 템 콜 의 이 름

typeN는 N번 째 인 자 의 타 입

argN는 N번 째 인 자 의 이 름

이 매 크 로 는 명 시 한 인 자 를 갖 는 name 이 름 의 함 수 를 만 든 다 . 소 스 파 일 에 _syscall()을 포 함 시 키 면 , name으 로 시 스 템 콜 을 호 출 할 수 있 다 .

예 제

#include <stdio.h>

#include <linux/unistd.h>

/* _syscallX 매 크 로 /관 련 된 것 */

#include <linux/kernel.h>

/* struct sysinfo */

_syscall1(int, sysinfo, struct sysinfo *, info);

/* 주 의 : nroff 소 스 에 서 바 로 복 사 를 한 다 면 , printf 문 에 서
여 분 의 백 슬 레 쉬 (\)를 지 워 야 한 다 . */

int main(void)
{

struct sysinfo s_info;

int error;

error = sysinfo(&s_info);

printf("code error = %d\n", error);

printf("Uptime = %ds\nLoad: 1 min %d / 5 min %d / 15 min %d\n"
"RAM: total %d / free %d / shared %d\n"
"Memory in buffers = %d\nSwap: total %d / free %d\n"
"Number of processes = %d\n",

s_info.uptime, s_info.loads[0],

s_info.loads[1], s_info.loads[2],

s_info.totalram, s_info.freeram,

s_info.sharedram, s_info.bufferram,

s_info.totalswap, s_info.freeswap,

s_info.procs);

return(0);

}

예 제 출 력

code error = 0
uptime = 502034s
Load: 1 min 13376 / 5 min 5504 / 15 min 1152
RAM: total 15343616 / free 827392 / shared 8237056
Memory in buffers = 5066752
Swap: total 27881472 / free 24698880
Number of processes = 40

주 의

_syscall() 매 크 로 는 프 로 토 타 입 을 만 들 지 는 않 는 다 . 특 히 C++ 사 용 자 라 면 , 프 로 토 타 입 은 생 성 해 야 만 할 것 이 다 .

시 스 템 콜 은 양 수 나 음 수 에 러 코 드 만 을 리 턴 해 야 만 하 지 는 않 는 다 . 어 떻 게 에 러 를 리 턴 하 는 지 를 알 려 면 소 스 를 읽 을 필 요 가 있 다 . 보 통 음 수 는 표 준 에 러 코 드 이 다 . 즉 , −EPERM. _syscall() 매 크 로 는 r이 음 수 가 아 닐 때 r를 리 턴 하 지 만 , r이 음 수 일 때 −rerrno에 설 정 하 고 −1을 리 턴 한 다 . 에 러 코 드 에 대 해 서 는 errno(3)을 보 아 라 .

mmap과 같 은 몇 몇 의 시 스 템 콜 은 5개 이 상 의 인 자 를 갖 는 다 . 이 는 인 자 를 스 택 에 넣 고 인 자 블 럭 을 포 인 터 를 넘 기 는 방 법 으 로 처 리 된 다 .

시 스 템 콜 을 정 의 할 때 , 인 자 는 반 드 시 값 이 나 포 인 터 (구 조 체 같 은 집 합 형 의 경 우 )로 넘 겨 져 야 만 한 다 .

호 환

시 스 템 콜 이 어 떤 유 닉 스 변 형 이 나 표 준 과 호 환 이 되 는 지 나 타 내 는 코 드 는 다 음 과 같 다 :

SVr4

시 스 템 V 릴 리 즈 4 유 닉 스 (System V Release 4 Unix), "Programmer’s Reference Manual: Operating System API (Intel processors)" (Prentice-Hall 1992, ISBN 0-13-951294-2)에 설 명 되 있 다 .

SVID

시 스 템 V 인 터 페 이 스 정 의 (System V Interface Definition), "The System V Interface Definition, Fourth Edition"에 설 명 되 있 고 , 이 는 ftp://ftp.fpk.novell.com/pub/unix-standards/svid에; 포 스 트 스 크 립 트 파 일 로 있 다 .

POSIX.1

IEEE 1003.1-1990 part 1, 별 칭 ISO/IEC 9945-1:1990s, 별 칭 "IEEE Portable Operating System Interface for Computing Environments", Donald Lewine의 "POSIX Programmer’s Guide" (O’Reilly & Associates, Inc., 1991, ISBN 0-937175-73-0)에 설 명 되 있 다 .

POSIX.1b

IEEE Std 1003.1b-1993 (POSIX.1b standard)는 포 터 블 운 영 체 제 를 위 한 실 시 간 인 터 페 이 스 를 설 명 한 다 , 별 칭 ISO/IEC 9945-1:1996, Biil O. Gallmeister의 "Programming for the real world − POSIX.4" (O’Reilly & Associates, Inc. ISBN 1-56592-074-0)에 설 명 되 있 다 .

SUS, SUSv2

단 일 유 닉 스 명 세 (Single Unix Specification). (X/Open과 The Open Group에 서 만 들 었 다 . http://www.UNIX-systems.org/version2/를; 참 조 하 라 .)

4.3BSD/4.4BSD

버 클 리 유 닉 스 의 4.3과 4.3 배 포 본 . 4.4BSD는 4.3부 터 호 환 성 이 유 지 되 었 다 .

V7

버 전 7 (Version 7), 벨 연 구 소 의 원 조 유 닉 스 .

파 일

/usr/include/linux/unistd.h

관 련 항 목

errno(3)

역 자

임 종 균 <hermes44 [AT] secsm.org>, 2000년 4월 19일