2011. 10. 23. 23:07

◎ 시스템들은 한계들(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 인수인 pathnamefiledes 인수의 제약 사항. (제약 위반 시 결과는 정의되지 않음)

▶ _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에 대해 지정된 파일은 반드시 디렉터리이어야 한다.

반환값은 그 디렉터리 안의 심볼릭 링크가 담을 수 있는 문자열의 최대 길이이다.

 

Posted by devanix