◎ 시스템들은 한계들(Lmists)을 다음과 같이 세 종류로 분류:
1. 컴파일 시점 한계들 (헤더)
2. 파일이나 디렉터리와는 무관한 실행시점 한계들(sysconf 함수)
3. 파일이나 디렉터리와 연관된 실행시점 한계들(pathconf, fpathconf 함수)
◎ Compile-time limits (헤더):
ISO C Limits : <limits.h> <stdio.h>
POSIX Limits : 일부<limits.h>-><bits/posix1_lim.h>,<bits/posix2_lim.h>
XSI Limits : 일부 <limits.h>-><bits/xopen_lim.h>
(우분투 kernel 3.0.x는 </usr/include/i386-linux-gnu/bits/*lim.h>에 정의)
◎ Runtime limits
특정한 시스템이 실제로 지원하는 한계를 알아내려면 일부는 컴파일 시점에서 알 수 있으나
어떤 것들은 반드시 실행시점에서 파악해야 한다. 또한 어떤 한계들은 주어진 한 시스템에서
변하지 않지만, 파일이나 디렉터리에 연관된 일부 한계들은 상황에 따라 변한다.
실행시점 한계들을 알고자 할 때 사용할 수 있는 함수들은 다음 세 가지이다.
#include <unistd.h> long sysconf(int *name); long pathconf(char *pathname, int name); long fpathconf(int *filedes, int name);
all three return: 성공 시 해당 값, 오류 시 -1. ㆍname 인수에 적절한 상수가 지정되지 않으면 -1, errno는 EINVAL로 설정. ㆍ미결정인 한계의 경우 -1이 반환되나 errno는 설정하지 않음. |
@ pathconf, fpathconf 두 함수는 기능은 동일하되,
하나는 pathname(경로명) 이며, 하나는 filedes(파일 디스크립터)를 받는다는 점에서 구별.
@ name : sysconf는 _SC_*로 시작, (f)pathconf는 _PC_*로 시작.
[ sysconf로 얻을 수 있는 한계들과 그에 해당하는 name 인수 값]
name argument | Description |
_SC_ARG_MAX | exec* 함수들에 대한 인수들의 최대 길이 (바이트 단위) |
_SC_ATEXIT_MAX | atexit 함수로 등록할 수 있는 함수들의 최대 개수 |
_SC_CHILD_MAX | 실제 사용자 ID당 자식 프로세스 개수 |
_SC_CLK_TCK | 1초 동안의 클록 틱 개수 |
_SC_COLL_WEIGHTS_MAX | 로케일 정의 파일의 LC_COLLATE 순서 키워드의 한 항목에 배정할 수 있는 가중치들의 최대 개수 |
_SC_HOST_NAME_MAX | gethostname이 돌려주는 호스트 이름의 최대 길이 |
_SC_IOV_MAX | readv or writev에 사용할 수 있는 iovec 구조체의 최대 개수 |
_SC_LINE_MAX | utility의 입력 라인의 최대 길이 |
_SC_LOGIN_NAME_MAX | login 이름의 최대 길이 |
_SC_NGROUPS_MAX | 프로세스당 동시적인 추가 그룹 ID 최대 개수 |
_SC_OPEN_MAX | 프로세스당 열린 파일 최대 개수 |
_SC_PAGESIZE | 시스템 메모리 페이지 크기(바이트 단위) |
_SC_PAGE_SIZE | 시스템 메모리 페이지 크기(바이트 단위) |
_SC_RE_DUP_MAX | regexec 함수와 regcomp 함수에 구간 표기 \{m,n\}를 사용할 때 허용되는, 기본 정규표현식 안의 반복된 출현 횟수 |
_SC_STREAM_MAX | 프로세스가 동시에 열어둘 수 있는 표준 I/O 스트림 최대 개수 (FOPEN_MAX와 같아야 함) |
_SC_SYMLOOP_MAX | 경로이름 해소 도중 운행될 수 있는 심볼릭 링크 개수 |
_SC_TTY_NAME_MAX | 터미널 장치 이름의 길이(종료 널 문자 포함) |
_SC_TZNAME_MAX | 시간대 이름의 최대 바이트 수 |
[ (f)pathconf로 얻을 수 있는 한계들과 그에 해당하는 name 인수 값 ]
name argument | Description |
_PC_FILESIZEBITS | 지정된 디렉터리에 존재할 수 있는 정규 파일의 최대 크기를 하나의 부호 있는 정수 값으로 나타내는 데 필요한 최소 비트 수 |
_PC_LINK_MAX | 파일의 최대 링크 개수 |
_PC_MAX_CANON | 터미널의 표준 입력 대기열의 최대 바이트 수 |
_PC_MAX_INPUT | 터미널의 입력 대기열에 사용할 수 있는 공간의 최대 바이트 수 |
_PC_NAME_MAX | 파일이름의 최대 바이트 수(종료 널 문자는 뺀) |
_PC_PATH_MAX | 상대 경로이름의 최대 바이트 수(종료 널 문자 포함) |
_PC_PIPE_BUF | 파이프에 원자적으로 기록될 수 있는 최대 바이트 수 |
_PC_SYMLINK_MA | 심볼릭 링크의 최대 바이트 수 |
@ (f)pathconf 인수인 pathname과 filedes 인수의 제약 사항. (제약 위반 시 결과는 정의되지 않음)
▶ _PC_MAX_CANON과 _PC_MAX_INPUT에 대해 지정된 파일은 반드시 터미널 파일이어야 함.
▶ _PC_LINK_MAX에 대해 지정된 파일이 디렉터리이면 반환 값은 그 디렉터리 안의 파일이름 항목들이
아니라 디렉터리 자체에 대한 것이다.
▶ _PC_FILESIZEBITS와 _PC_NAME_MAX에 대해 지정된 파일은 반드시 디렉터리이어야 한다.
반환값은 그 디렉터리 안의 파일이름들에 대한 것이다.
▶ PC_PATH_MAX에 대해 지정된 파일은 반드시 디렉터리이어야 한다.
반환값은 지정된 디렉터리가 작업 디렉터리일 때의 상대 경로이름의 최대 길이이다.
(안타깝게도 이 값이 우리가 알고자 하는 절대 경로 이름의 실제 최대 길이는 아니다.)
▶ _PC_PIPE_BUF에 대해 지정된 파일은 반드시 파이프, FIFO, 디렉터리이어야 한다.
파이프나 FIFO의 경우 반환값은 지정된 파이프 또는 FIFO에 대한 한계이고, 디렉터리의 경우 반환값은
그 디렉터리안에 생성된 임의의 FIFO에 대한 한계이다.
▶ _PC_SYMLINK_MAX에 대해 지정된 파일은 반드시 디렉터리이어야 한다.
반환값은 그 디렉터리 안의 심볼릭 링크가 담을 수 있는 문자열의 최대 길이이다.
'Linux > Programming' 카테고리의 다른 글
프로세스의 종료 - exit, _exit, atexit (0) | 2011.11.03 |
---|---|
파일 접근 시간과 수정 시간을 변경 - utime(2) (0) | 2011.10.23 |
파일 시간들(File Times) - 수정, 변경, 접근 시간 (0) | 2011.10.23 |
파일 접근 권한 비트 요약 (0) | 2011.10.23 |
파일 상태 정보 얻기 - stat, fstat, and lstat Functions (0) | 2011.10.23 |