이 름
syslog − 커 널 메 시 지 링 버 퍼 를 읽 거 나 소 거 한 다 ; console_loglevel을 설 정 한 다 .
사 용 법
#include <unistd.h>
#include <linux/unistd.h>
_syscall3(int, syslog, int, type, char *, bufp, int, len);
int syslog(int type, char *bufp, int len);
설 명
이 것 은 아 마 도 당 신 이 흥 미 를 가 질 만 한 기 능 은 아 니 다 . C라 이 브 러 리 인 터 페 이 스 를 위 해 syslog(3) 를 본 다 . 이 페 이 지 는 단 지 텅 빈 커 널 시 스 템 호 출 인 터 페 이 스 를 문 서 화 했 다 .
type인 수 는 syslog 에 의 한 실 행 을 결 정 한 다 .
kernel/printk.c
로 부 터 인 용 :
/*
* Commands to sys_syslog:
*
* 0 -- Close the log. Currently a NOP.
* 1 -- Open the log. Currently a NOP.
* 2 -- Read from the log.
* 3 -- Read up to the last 4k of messages in the ring
buffer.
* 4 -- Read and clear last 4k of messages in the ring buffer
* 5 -- Clear ring buffer.
* 6 -- Disable printk’s to console
* 7 -- Enable printk’s to console
* 8 -- Set level of messages printed to console
*/
기 능 3은 비 root 프 로 세 스 만 을 허 용 한 다 .
커
널 로 그 버 퍼
커 널 은 메 시 지
가 커 널 함 수 printk()/fh
인 수 로 써 주 어
지 는 것 이 저 장
된 LOG_BUF_LEN (4096, since 1.3.54: 8192, since
2.1.113: 16384)의 순 환 버 퍼
를 갖 는 다 .
호 출 syslog (2,buf,len) 는 이 커 널 로 그 버 퍼 가 비 워 지 지 않 을 때 까 지 대 기 한 후 대 부 분 의 len바 이 트 에 서 버 퍼 buf를 읽 는 다 . 그 것 은 읽 어 들 인 바 이 트 양 을 반 환 한 다 . 로 그 에 서 읽 은 바 이 트 는 로 그 버 퍼 로 부 터 사 라 진 다 : 정 보 는 한 번 만 읽 을 수 있 다 . 이 것 은 사 용 자 프 로 그 램 이 /proc/kmsg 를 읽 을 때 커 널 에 의 해 실 행 된 함 수 이 다 .
호 출 syslog (3,buf,len) 는 로 그 버 퍼 로 부 터 마 지 막 len 바 이 트 를 읽 지 만 , 버 퍼 에 기 록 된 이 상 은 읽 지 는 못 할 것 이 다 .
호 출 syslog (4,buf,len) 도 같 다 .
호 출 syslog (5,dummy,idummy) 는 단 지 ’clear ring buffer’ 명 령 을 실 행 한 다 .
메 세 지 의 모 든 텍 스 트 행 은 로 그 레 벨 이 있 다 . 이 레 벨 은 d가 1-7범 위 안 의 <d>를 가 진 시 작 행 이 아 니 라 면 DEFAULT_MESSAGE_LOGLEVEL - 1 (6)이 다 . 로 그 레 벨 의 전 통 적 의 미 는 다 음 과 같 이 <linux/kernel.h> 에 정 의 되 어 있 다 :
#define
KERN_EMERG "<0>" /* system is unusable */
#define KERN_ALERT "<1>" /* action must be
taken immediately */
#define KERN_CRIT "<2>" /* critical
conditions */
#define KERN_ERR "<3>" /* error conditions
*/
#define KERN_WARNING "<4>" /* warning
conditions */
#define KERN_NOTICE "<5>" /* normal but
significant condition */
#define KERN_INFO "<6>" /* informational */
#define KERN_DEBUG "<7>" /* debug-level
messages */
반 환 값
에 러 시 , -1이 반 환 되 고 , errno가 설 정 된 다 . 그 렇 지 않 으 면 2,3,4와 같 은 형 태 를 위 해 syslog()는 읽 은 바 이 트 수 를 반 환 하 고 , 그 렇 지 않 으 면 0이 다 .
에 러
EPERM |
시 도 는 console_loglevel을 바 꾸 거 나 root권 한 이 없 는 프 로 세 스 에 의 해 커 널 메 세 지 링 버 퍼 를 소 거 한 다 . | ||
EINVAL |
잘 못 된 배 개 변 수 . |
ERESTARTSYS
시 스 템 호 출 은 아 무 것 도 읽 지 못 하 는 시 그 널 에 의 해 중 단 된 다 .
호 환
이 시 스 템 호 출 은 리 눅 스 에 특 화 되 었 다 . 그 리 고 다 른 프 로 그 램 에 서 는 쓰 여 지 지 않 는 다 .