27 시스템 구성 파라미터

이 장에 설명된 함수들과 매크로들은 운영체제의 구성 파라미터에 대한 정보를 제공한다_시스템 구성 파라미터는, 예를 들면, 용량제한, 선택적인 POSIX 특징의 존재, 실행 파일들을 위한 디폴트 경로(path) ( 27. 12절[String Parameters] 참조. )


27. 1 일반적인 용량 제한

POSIX. 1 과 POSIX. 2 표준은 시스템의 용량 제한들을 나타내는 파라미터의 개수를 정한다. 그 제한들은 주어진 운영체제에서 고정된 상수이거나, 아니면 기계마다 다양할 수 있다. 예를 들면, 어떤 제한된 값은 실행할 때나, 커널을 다시 재건할 때, 시스템 관리자에 의해서 구성될 수 있고, 이것은 응용 프로그램들의 재 컴파일이 요구되지 않는다.

다음의 제한 파라미터들은 파라미터에 단일한 제한값을 갖는, 고정된 시스템일 경우에만 'limits. h'에 정의되어 있다. 만일 시스템이 다른 파일시스템이나 혹은 다른 제한을 갖는 파일들을 허용한다면, 그 매크로는 정의되지 않는다; 특정한 시스템에서 특정한 시간에 적용되는 제한을 찾아내려면 sysconf를 사용하라. 27. 4절 [Sysconf] 참조.

그 파라미터 각각은 다른 이름의 매크로를 갖는데, 그것은 어떤 POSIX시스템에서 갖도록 허용되는, 최소한의 제한 값이 주어지는, `_POSIX'로 시작하는 문자열이다. 27. 5절 [Minimums] 참조.

매크로 : int ARG__MAX

만일 정의되면, exec부류 함수들에게 인수로 줄 수 있는 argv와 환경변수들의 결합된 최대길이를 나타냄. 그 최대길이는 불변이다.

매크로 : int CHILD__MAX

만일 정의되면, 어떤 시간에 같은 실제 사용자 ID로 존재할 수 있는 프로세스의 최대개수를 말함. 그 최대 개수는 불변이다.

매크로 : int OPEN__MAX

만일 정의되면, 단일한 프로세스가 동시에 개방할 수 있는 파일들의 최대개수를 말한다. 그 최대개수는 불변이다.

매크로 : int STREAM__MAX

만일 정의되면, 단일한 프로세스가 동시에 개방할 수 있는 스트림의 최대개수를 말한다. 그 최대개수는 불변이다. 7. 3절 [Opening Streams] 참조.

매크로 : int TZNAME__MAX

만일 정의되면, 시간대(time zone)의 불변하는 최대길이를 말한다. 17. 2. 6 [Time Zone Functions] 참조.

 

다음 제한 매크로들은 `limits. h'에 항상 정의되어 있다.

매크로 : int NGROUPS__MAX

한 프로세스가 가질 수 있는 부가적인 그룹 ID들의 최대개수. 이 매크로의 값은 실제로는 최댓값의 하한 경계이다. 그것은 당신이 얼마나 많은 부가적인 그룹 ID들을 가질 수 있는지를 알 수 있게 하지만, 어떤 특정한 기계는 그것보다 더 많은 것을 허용하기도 한다. 당신은 어떤 특정한 기계가 당신에게 더 많은 ID들을 허용할 수 있는지에 대해서 알아보기 위해서 sysconf 를 사용할 수 있다. ( 27. 4절 [Sysconf] 참조. )

매크로 : int SSIZE__MAX

타입 ssize_t 의 오브젝트 안에 넣을 수 있는 가장 큰 값. 효율적이게, 이것은 단일한 명령에서 읽거나 쓸 수 있는 바이트의 개수에 대한 제한이 된다. 이 매크로는 제한이 불변이기 때문에 모든 POSIX 시스템들에서 정의되어 있다.

매크로 : int RE__DUP__MAX

정규표현식의 `\{min, max\}'의 구성 안에 허용되는 반복의 최대개수. 이 매크로의 값은 실제로는 최댓값 하향 경계선이다. 그것은 당신이 얼마나 많은 반복을 할 수 있는지를 알리지만, 어떤 특정한 기계는 그것보다 더 많은 반복을 허용한다. 어떤 특정한 기계가 더 많은 반복을 허용하는지를 알기 위해서는 sysconf를 사용할 수 있다. (27. 4절 [Sysconf] 참조. ) sysconf의 값은 단지 하향 경계의 값을 말해주므로_더 큰 값으로 작업할 수 있다. POSIX. 2 시스템들에서는 그들에게 어떤 정해진 제한 값이 없다고 하더라도 항상 정의되어야 하기 때문에 모든 POSIX. 2에서 이 매크로는 항상 정의되어 있다.


27. 2 포괄적인 시스템 옵션들

POSIX 는 모든 POSIX 시스템들이 지원하지 않는 시스템-명세 옵션을 정의한다. 그 옵션들은 라이브러리가 아니라 커널에 제공되고 있기 때문에, 간단히 GNU C 라이브러리를 사용해서는 그 기능들이 지원됨을 보증할 수 없다; 당신이 사용중인 시스템에 달려있다.

이 절에 있는 매크로들과 sysconf 함수를 함께 사용해서 주어진 옵션의 유용성을 테스트할 수 있다. 매크로들은 `unistd. h'에 정의되어 있다. 다음 매크로들은, 만일 그 매크로들이 `unistd. h'에 정의되어있다면, 옵션들이 지원되는 것이고, 그렇지 않다면 옵션이 될 수도 있고 되지 않을 수도 있다. 알아내려면 sysconf를 사용하라. 27. 4절 [Sysconf]참조.

매크로 : int __POSIX__JOB__CONTROL

만일 이 심볼이 정의되면, 시스템이 작업제어를 지원함을 알린다. 그렇지 않다면, 한 세션에 있는 모든 프로세스들은 단일한 프로세스 그룹에 소속되어있다. 24장 [Job Control] 참조.

매크로 : int __POSIX__SAVED__IDS

만일 이 심볼이 정의되면, 실행파일이 set-user-ID 또는 set-group-ID 비트들을 설정하여 실행되기 전에 프로세스의 유효 사용자와 그룹 ID들을 시스템이 기억했다가 나중에 그 값들을 다시 반환함을 의미한다. 이 옵션이 정의되지 않으면, 만일 특권을 가지지 않은 프로세스가 그 유효 사용자와 그룹 ID 를 프로세스의 실제 사용자 또는 그룹 ID로 변경했을 때 그것을 다시 되돌릴 수 없다. 25. 8절 [Enable/Disable Setuid] 참조.

다음 매크로에서, 만일 그 매크로들이 `unistd. h'에 정의되면, 그 값은 그 옵션이 지원되는지의 여부를 알린다. -1의 값의 의미는 없음을, 제외한 다른 값이 있음을 의미한다. 만일 그 매크로가 정의되지 않았다면, 그 옵션은 지원될 수도 있고 안될 수도 있다; 알아내려면 sysconf를 사용하라. 27. 4절 [Sysconf] 참조.

매크로 : int __POSIX2__C__DEV

만일 이 심볼이 정의되면, 그것은 그 시스템이POSIX. 2 C 컴파일러 명령, c89를 가지고 있음을 알린다. GNU C 라이브러리는 만일 당신이 C 컴파일러를 가지지 않았다면 당신이 그것을 인스톨하지 않았다는 가정으로, 항상 그 값을 1로써 정의한다.

매크로 : int __POSIX2__FORT__DEV

만일 이 심볼이 정의되면, 시스템이 POSIX. 2 포트란 컴파일러 명령 fort77을 가지고 있음을 알린다. GNU C 라이브러리에서 이 값은 결코 정의되지 않는다.

매크로 : int __POSIX2__FORT__RUN

만일 이 심볼이 정의되면, 시스템이 포트란 캐리지 제어를 해석하기 위한 명령으로 POSIX. 2 asa 명령을 갖고 있음을 지적한다. GNU C 라이브러리는 그 시스템이 무엇을 가졌는지 알지 못하기 때문에 이 매크로는 결코 정의하지 않는다.

매크로 : int __POSIX2__LOCALEDEF

이 심볼이 정의되면, 시스템이 POSIX. 2 localedef 명령을 갖고 있음을 알린다. GNU C라이브러리는 그 시스템이 무엇을 가졌는지 알지 못하기 때문에 이 매크로는 결코 정의하지 않는다.

매크로 : int __POSIX2__SW__DEV

이 심볼이 정의되면, 시스템이 POSIX. 2 명령들 ar, make 그리고 strip을 가지고 있음을 알린다. GNU C라이브러리에서, ar과 make는 라이브러리를 인스톨시키기 위해서는 당신이 꼭 갖고 있어야만하고 strip이 없음은 가망 없는 일이므로 이 매크로 값을 항상 1로써 정의한다.


27. 3 지원되는 POSIX의 버전은?

매크로 : long int __POSIX__VERSION

이 상수는 POSIX. 1 표준의 버전을 나타낸다. 1990 POSIX. 1은 199009L의 값이다. _POSIX_VERSION은 항상 어느 POSIX 시스템에서든지 `unistd. h'에 정의되어 있다.
사용법 노트: `unistd. h' 를 인클루드 함으로써 시스템이 POSIX를 지원하는지의 여부를 테스트하지 말고 _POSIX_VERSION이 정의되었는지를 통해서 그 여부를 테스트하라. 비-POSIX 시스템은, `unistd. h'가 없기 때문에 아마도 실패할 것이다. 컴파일 시간에 POSIX가 지원되는지, 또는 `unistd. h'가 존재하는지의 여부를 당신이 알 수 있는 방법은 없다.

GNU C 컴파일러는 만일 목표 시스템이 POSIX 시스템이라면 심볼 __POSIX__를 미리 정의한다. 정의된 __POSIX__를 테스트해서, 당신이 POSIX 시스템상에서 사용하지 않는 것을 제공했는지, 그러한 것을 신뢰성 있게 검출할 것이다.

매크로 : long int __POSIX2__C__VERSION

이 상수는 라이브러리와 시스템 커널이 제공하는 POSIX. 2 표준의 버전을 나타낸다. 우리는 POSIX. 2 표준의 첫 번째 버전이 어떤 값인지 알지 못하기 때문에 그 값은 그 표준이 공식적으로 채택된 연도와 달을 기준으로 한다.
이 심볼의 값은 시스템에 인스톨된 유틸리티에 대한 것은 아무 것도 말하지 않는다.
 
사용법 노트: 당신은 POSIX. 1 시스템 라이브러리가 POSIX. 2를 지원하는지의 여부를 알기 위해서 이 매크로를 사용할 수 있다. 어떤 POSIX. 1 시스템이 `unistd. h'를 갖고있다면, 그 파일을 인클루드하고 정의된 (_POSIX2_C_VERSION) 을 테스트하라.


27. 4 sysconf 사용하기

당신의 시스템이 시스템 제한을 구성할 수 있을 때, 당신은 어느 특정한 기계에 적용되는 그 값을 알아내기 위해서 sysconf 함수를 사용할 수 있다. 그 함수와 연관된 파라미터 상수들은 헤더파일 `unistd. h' 에 선언되어 있다.

27. 4. 1 sysconf의 정의

함수 : long int sysconf (int parameter)

이 함수는 실행시간 시스템 파라미터에 대해서 질의하기 위해서 사용된다. 그 parameter 인수는 밑에 설명된 심볼들 `_SC_'중 하나가 되어야 한다. sysconf의 보통의 반환값은 당신이 요청한 값이고 만일 그 제한이 허용되지 않거나 에러가 발생한 경우에는 -1의 값을 반환한다. 다음의 errno는 이 함수를 위해 정의된 에러상황이다.
EINVAL parameter의 값이 유용하지 않다.

27. 4. 2 sysconf의 parameter를 위한 상수들

다음은 sysconf에 parameter 인수로써 사용하기 위한 기호상수들이다. 그 값들은 모두 정수 상수들이다 (좀더 특별하게 말하면, 열거형 값이다. )

 

27. 4. 3 sysconf의 예제

우리는 일단 당신이 관심을 갖고있는 파라미터에 대한 매크로 정의가 있는지의 여부를 테스트 해보고 없다면 그 다음 sysconf를 사용하기를 권장한다. 예를 들어, 작업제어가 지원되는지의 여부를 어떻게 테스트하는지에 대한 예제가 다음에 있다:

int
have_job_control (void)
{
#ifdef _POSIX_JOB_CONTROL
return 1;
#else
int value = sysconf (_SC_JOB_CONTROL);
if (value < 0)
/* 만일 시스템이 고정되어 있다면, 시도를 계속할 수 없다. */
fatal (strerror (errno));
return value;
#endif
}
 
다음은 수치적 제한의 값을 얻기 위한 방법이다.
int
get_child_max ()
{
#ifdef CHILD_MAX
return CHILD_MAX;
#else
int value = sysconf (_SC_CHILD_MAX);
if (value < 0)
fatal (strerror (errno));
return value;
#endif
}


27. 5 총괄적인 용량 제한들을 위한 최소값

다음은 시스템 제한 파라미터들을 위한 POSIX 최소 하향 한계들을 위한 이름들이다. 그 값들의 유의값(significance)은 당신이 사용하고 있는 시스템이 무엇이든지 상관없이 그 제한을 안전하게 사용할 수 있는 값들이다.

_POSIX_ARG_MAX

이 매크로의 값은 exec 함수에 사용할 수 있는 argv와 환경변수들의 결합된 최대길이를 위한 POSIX에 의해 허용되고 있는 대부분의 제한 값이다. 그 값은 4096이다.

_POSIX_CHILD_MAX

이 매크로의 값은 실제 사용자 ID마다 동시에 가질 수 있는 프로세스들의 최대 개수로써 POSIX에 의해 허용되고 있는 대부분의 제한 값이. 그 값은 6이다.

_POSIX_NGROUPS_MAX

이 매크로의 값은 프로세스당 가질 수 있는 부가적인 그룹 ID들의 최대 개수로써 POSIX에 의해 대부분 허용되고 있는 제한 값. 그 값은 0이다.

_POSIX_OPEN_MAX

이 매크로의 값은 단일한 프로세스에서 동시에 개방할 수 있는 파일들의 최대개수로써 POSIX에 의해 대부분 허용되고 있는 제한 값. 그 값은 16이다.

_POSIX_SSIZE_MAX

ssize_t 의 오브젝트에 저장될 수 있는 최댓값으로써 POSIX에 의해 대부분 허용되고 있는 제한 값. 그 값은 32767이다.

_POSIX_STREAM_MAX

이 매크로의 값은 단일한 프로세스가 동시에 개방할 수 있는 스트림의 최대개수로써 POSIX에 의해 대부분 허용되고 있는 제한 값. 그 값은 8이다.

_POSIX_TZNAME_MAX

이 매크로의 값은 시간대의 최대 길이로써 POSIX에 의해 허용되고 있는 대부분의 제한 값. 그 값은 3이다.

_POSIX2_RE_DUP_MAX

이 매크로의 값은 정규표현식의 `\{min, max\}'에서 사용되고 있는 숫자로써 POSIX에 의해 허용되고 있는 대부분의 제한 값. 그 값은 255이다.


27. 6 파일 시스템 용량의 제한

POSIX. 1 표준은 파일 시스템의 제한들을 나타내는 파라미터들의 개수를 한정하고 있다. 이것은 보통의 경우는 아니지만, 한 파라미터에 단일한 값을 갖는 고정된 시스템에서 가능한 것이다. 대부분의 시스템에서, 다른 최대 제한을 갖는 다른 파일 시스템 ( 그리고, 다른 파라미터들이나, 심지어 다른 파일들 )이 가능하다. 예를 들어, 다른 기계들로부터 파일 시스템들의 어떤 것을 마운트(mount) 하기 위해서 NFS를 사용한다면 매우 가능성 있는 일이다.

다음 매크로들 각각은 만일 그 파라미터들이 고정된 값을 갖는 시스템이라면 `limits. h'에 정의되어 있다. 만일 그 시스템이 다른 제한들을 갖는 파일시스템이나 파일들을 허용한다면, 그 매크로는 정의되지 않는다; 특정한 파일에 적용되는 제한을 알아내려면 pathconf 나 fpathconf를 사용하라. 27. 9절 [Patcconf] 참조. 각 파라미터들은 다른 매크로들을 갖는데, 그 매크로는 POSIX 시스템에서 갖도록 허용되는 제한의 최소값을 갖는 `_POSIX'로 시작되는 이름이다. 27. 8절 [File Minimums] 참조.

매크로 : int LINK__MAX

불변의 시스템은 주어진 파일을 위한 이름들의 개수를 제한한다. 9. 3절 [Hard Links] 참조.

매크로 : int MAX__CANON

불변의 시스템은 입력 편집이 가능할 때 한 라인의 텍스트의 양을 제한한다. 12. 3절 [Canonical or Not] 참조.

매크로 : int MAX__INPUT

불변의 시스템은 입력(input)으로써 미리 입력(typed)된 문자들의 총 개수를 제한한다. 12. 2 [I/O Queses] 참조.

매크로 : int NAME__MAX

불변의 시스템은 파일 이름 구성요소의 길이에 대해서 제한한다.

매크로 : int PATH__MAX

불변의 시스템은 전체 파일이름의 길이에 대해서 제한한다 (그것은 open과 같은 시스템 호출에 주어진 인수이다).

매크로 : int PIPE__BUF

불변의 시스템은 파이프에 자동적으로 쓰여질 수 있는 바이트의 개수에 대해서 제한한다. 만일 다중 프로세스가 동시에 같은 파이프에 기록하고 있다면, 다른 프로세스들로부터의 출력은 이 크기의 청크(chunks) 에 삽입될 것이다. 10장 [Pipes and FIFOs] 참조.

 

다음은 같은 역할을 하는 매크로의 다른 이름이다.

매크로 : int MAXNAMLEN

이것은 NAME_MAX 를 위한 BSD 이름이다. `dirent. h'에 정의되어 있다.

매크로 : int FILENAME__MAX

이 매크로의 값은 파일 이름 문자열의 최대 길이를 나타내는 정수 상수 표현이다. 이것은 `stdio. h'에 정의되어 있다. PATH_MAX와 달리, 이 매크로는 실제로 제한된 값이 없더라도 정의되어 있다. 그 경우, 그 값은 전형적으로 매우 큰 값으로 존재한다. GNU 시스템에서는 항상 그 경우이다.
사용법 노트: 파일 이름을 저장하기 위해서 배열의 크기를 FILENAME_MAX를 사용하지 말아라! 당신이 그렇게 배열을 크게 만드는 것은 가능하지 않다! 대신에 동적 할당을 사용하라( 3장 [Memory Allocation] 참조. )


27. 7 파일에 지원되는 선택적 기능들

POSIX는 시스템에서 파일들을 운영하기 위해서 호출하는 시스템-설정 옵션들을 정의한다. 어떤 시스템들은 그 옵션들을 지원하고 다른 것은 지원하지 않는다. 그 옵션들이 라이브러리가 아니라 커널에서 제공되기 때문에, GNU C 라이브러리를 사용해서 그 기능들 중 어느 것이 지원되는지 간단히 확인할 수 없다. 그들은 파일 시스템과 기계 사이에서 굉장히 다양할 수 있다.

이 절은 당신의 기계가 특별한 옵션을 지원하는지에 대한 여부를 테스트 할 수 있는 매크로를 설명한다. 만일 주어진 매크로가 `unistd. h'에 정의되어 있다면, 그 값을 통해서 해당하는 기능들을 제공하는지에 대해서 알 수 있다. (-1의 값은 없음을 지적하고; 그 외 다른 값은 있음을 지적한다. ) 만일 그 매크로가 정의되어 있지 않으면, 그것은 특별한 파일들이 그 기능을 지원할 수도 있고 지원하지 않을 수도 있음을 의미한다.

GNU C 라이브러리를 지원하는 모든 기계에서는 또한 NFS를 지원하기 때문에, 모든 파일 시스템들이 _POSIX_CHOWN_RESTRICTED 와 _POSIX_NO_TRUNC 기능들을 지원하는지에 대해서 일반적인 구문을 전혀 만들 수 없다. 그래서 GNU C 라이브러리에서 그 매크로들은 결코 정의되지 않는다.

매크로 : int __POSIX__CHOWN__RESTRICTED

이 옵션이 가능하다면, chown 함수는 특권이 없는 프로세스들이 그 프로세스의 유효 사용자 ID나 부가적인 그룹 ID중의 하나로 파일의 그룹 소유자를 변경하는 것만을 허용하도록 제한한다. 9. 8. 4절 [File Owner] 참조.

매크로 : int __POSIX__NO__TRUNC

만일 이 옵션이 효과가 있다면, NAME_MAX 보다 긴 파일 이름 구성요소들은 ENAMETOOLONG 에러를 발생한다. 그렇지 않다면, 너무 긴 파일이름 구성요소는 잘리고 만다.

매크로 : unsigned char __POSIX__VDISABLE

이 옵션은 터미널 디바이스인 파일에만 오직 유효하다. 만일 이 옵션이 효력을 갖는다면, 특정한 제어문자를 처리할 때 개별적으로 효력이 없게 할 수 있다. 12. 4. 9절 [Special Characters] 참조.

만일 그 매크로들 중 하나가 정의되어 있지 않다면, 그것은 그 옵션이 어떤 파일들에는 효과가 있고 어떤 파일들에는 효과가 없음을 의미한다. 특정한 파일에 대해서 문의하려면, pathconf 또는 fpathconf를 호출하라. 27. 9절 [Pathconf] 참조.


27. 8 파일 시스템 제한을 위한 최소값들

다음은 위에 설명된 파라미터들에 대한 POSIX 최소 하향 경계들을 나타내는 이름이다. 그 값들은 당신이 사용하고 있는 특정한 시스템에 상관없이 제한들을 안전하게 사용할 수 있다.

_POSIX_LINK_MAX

POSIX에 의해 대부분 허가되고 있는 제한 값 파일의 링크 개수의 최댓값이다. 이 상수 값은 8이다. 그래서, 당신은 시스템 제한을 시험하지 않고도 한 개의 파일을 위해서 항상 8개의 이름을 만들 수 있다.

_POSIX_MAX_CANON

POSIX에 의해 대부분 허가되고 있는 제한 값, 터미널 디바이스로부터 한 개의 정규 입력 라인에서 최대한 받아들일 수 있는 바이트의 개수이다. 이 상수의 값은 255.

_POSIX_MAX_INPUT

POSIX에 의해 대부분 허가되고 있는 제한 값, 터미널 디바이스 입력 큐(또는 선행입력 버퍼)에 들어갈 수 있는 최대 바이트의 개수이다 12. 4. 4절 [Input Modes] 참조. 이 상수의 값은 255이다.

_POSIX_NAME_MAX

POSIX에 의해 대부분 허가되고 있는 제한 값, 파일 이름 구성에 있는 바이트의 최대 개수이다. 이 상수의 값은 14이다.

_POSIX_PATH_MAX

POSIX에 의해 대부분 허가되고 있는 제한 값 파일 이름의 최대 바이트 개수이다. 이 상수의 값은 255이다.

_POSIX_PIPE_BUF

POSIX에 의해 대부분 제한되고 있는 제한 값, 한 파이프에 자동적으로 쓰여질 수 있는 바이트의 최대 개수이다. 이 상수의 값은 512이다.


27. 9 pathconf 사용하기

당신의 기계가 한 개의 파일 시스템 파라미터에 대해서 여러 개의 값을 갖는 다른 파일들을 허용할 때, 당신이 어느 특정한 파일에 적용되는 값을 찾아내기 위해서는 이 절에 설명된 파일들을 사용해야만 한다. 그 함수들과 그와 연관된 파라미터 인수를 위한 상수들은 헤더파일 `unistd. h'에 선언되어 있다.

함수 : long int pathconf (const char *filename, int parameter)

이 함수는 filename이라는 이름을 가진 파일에 적용되는 제한에 대해서 질의하는데 사용된다. parameter 인수는 밑에 설명된 `_PC_' 상수중 한 개가 된다.
 
pathconf로부터의 보통 반환되는 값은 당신이 요청한 값이다. 어떤 제한으로 강요할 수 없거나 에러가 발생한 경우에는 -1의 값을 반환한다. 전자의 경우에는 errno가 설정되지 않았고, 후자의 경우에는 문제가 발생된 원인을 지적하기 위해서 errno가 설정되었다. 그래서 이 함수를 안정적으로 사용하기 위한 유일한 방법은 그것을 호출하기 전에 errno를 0으로 저장해놓는 것이다.
 
파일 이름 구문 에러들 외에도( 6. 2. 3절 [File Name Errors] 참조. ), 다음의 errno는 이 함수를 위해서 정의되었다.

EINVAL

parameter값이 유효하지 않거나, 그 실행이 지정된 파일을 위해서 그 parameter를 지원하지 않는다.

함수 : long int fpathconf (int filedes, int parameter)

이것은 정보를 요청하기 위한 파일을 정함에 있어서, 파일이름을 사용하는 것이 아니라 개방된 파일 기술자를 사용한다는 점을 제외하고는 pathconf와 같다. 다음의 errno는 이 함수를 위해 정의된 에러상황이다.

EBADF : filedes 인수가 유효한 파일 기술자가 아니다.

EINVAL

parameter 의 값이 유효하지 않거나, 그 실행은 지정된 파일을 위해서 그 parameter를 지원하지 않는다.

다음은 pathconf 와 fpathconf에 parameter 인수로써 사용할 수 있는 기호 상수들이다. 그 값들은 모두 정수 상수들이다.


27. 10 유틸리티 프로그램 용량 제한들

POSIX. 2 표준은 유틸리티 동작에 적용되는 시스템 제한을 정해놓았고, 당신은 sysconf를 통해서 그 제한을 억세스할 수 있다. GNU C 라이브러리는 그 제한들을 위해서 매크로를 정의하고, 만일 당신이 그 값을 질의하면 sysconf는 그들의 값을 반환한다; 하지만 그 값들은 아무런 의미 없는 정보이다. 그들은 POSIX. 2가 허가하는 가장 작은 값들이다.

매크로 : int BC__BASE__MAX

bc 유틸리티를 지원하도록 보증되는 obase의 최댓값.

매크로 : int BC__SCALE__MAX

bc 유틸리티를 지원하도록 보증되는 scale의 최댓값

매크로 : int BC__DIM__MAX

bc 유틸리티를 지원하도록 보증되는 한 개의 배열 안에 들어갈 수 있는 요소들의 최대개수.

매크로 : int BC__STRING__MAX

bc 유틸리티를 지원하도록 보증되는 한 개의 문자열 안에 들어갈 수 있는 문자들의 최대개수.

매크로 : int BC__DIM__MAX

bc 유틸리티를 지원하도록 보증되는 한 개의 배열 안에 들어갈 수 있는 요소들의 최대 개수.

매크로 : int COLL__WEIGHTS__MAX

로케일(locale)을 위해서 대조문자열을 정의하는데 사용될 수 있는 가중치의 최댓값.

매크로 : int EXPR__NEST__MAX

expr 유틸리티에 의해서 괄호안에 중첩될 수 있는 표현식의 최대 개수.

매크로 : int LINE__MAX

텍스트-지향 POSIX. 2 유틸리티들이 지원할 수 있는 최대 텍스트 라인. (만일 당신이 그 유틸리티의 GNU 버전을 사용하고 있다면, 가상 메모리를 사용함으로써 강요된 것을 제외하고는 실제로 아무런 제한이 없지만, 그 라이브러리가 당신에게 이것에 대해서 알릴 수 있는 아무런 방법이 없다. )

매크로 : int EQUIV__CLASS__MAX

로케일(locale) 정의에서 LC_COLLATE 범주 `order' 키워드의 엔트리에 배정될 수 있는 가중치의 최댓값. GNU C 라이브러리는 곧 로케일 정의들을 지원하지 않는다.


27. 11 유틸리티 제한들을 위한 최댓값

_POSIX2_BC_BASE_MAX

POSIX. 2에 의해 허용되고 있는 대부분의 제한으로써, bc 유틸리티 안에 있는 obase의 최댓값. 그 값은 99.

_POSIX2_BC_DIM_MAX

bc 유틸리티 안에 있는 배열의 최대크기를 위해서 POSIX. 2에 의해서 대부분 허용되고 있는 제한 값. 그 값은 2048.

_POSIX2_BC_SCALE_MAX

bc 유틸리티 안에 있는 scale의 최대크기를 위해서 POSIX. 2에 의해서 대부분 허용되고 있는 제한 값. 그 값은 99.

_POSIX2_BC_STRING_MAX

bc 유틸리티 안에 있는 문자열 상수의 최대크기를 위해서 POSIX. 2에 의해서 대부분 허용되고 있는 제한 값. 그 값은 1000이다.

_POSIX2_COLL_WEIGHTS_MAX

로케일 을 위해서 대조 문자열을 정의하는데 사용될 수 있는 가중치의 최댓값으로 POSIX. 2에 의해서 대부분 허용되고 있는 제한 값. 그 값은 2이다.

_POSIX2_EXPR_NEST_MAX

expr 유틸리티를 사용할 때 괄호안에 중첩된 표현식의 최대개수로써 POSIX. 2에 의해서 대부분 허용되고 있는 제한 값. 그 값은 32이다.

_POSIX2_LINE_MAX

텍스트 유틸리티들이 처리할 수 있는 텍스트 라인의 최대 크기로써 POSIX. 2에 의해서 대부분 허용되고 있는 제한 값. 그 값은 2048이다.

_POSIX2_EQUIV_CLASS_MAX

로케일 정의에서 LC_COLLATE 범주 `order' 키워드 엔트리에 배정할 수 있는 가중치의 최댓값으로써, POSIX. 2에 의해서 대부분 허용되고 있는 제한 값. 그 값은 2. GNU C 라이브러리는 곧 로케일 정의를 지원하지 않는다.


27. 12 문자열-평가 파라미터들

POSIX. 2는 confstr 함수를 사용해서 운영체제로부터 문자열-평가 파라미터들을 얻는 방법을 정의한다.

함수 : size_t confstr (int parameter, char *buf, size_t len)

이 함수는 buf에서 시작되는 메모리 공간에 len길이의 바이트를 가진 문자열을 저장하여, 문자열-평가 시스템 파라미터를 읽는다. parameter 인수는 밑에 설명된 `_CS_'중의 하나가 될 것이다.
 
confstr로부터 보통 반환되는 값은 당신이 요청했던 문자열 값의 길이다. 만일 당신이 buf를 널 포인터로 하여 그 함수를 호출한다면, confstr은 그 문자열을 저장하려 시도하지 않는다; 그것은 단지 그 길이를 반환한다. 에러를 지적하는 값은 0이다.
 
만일 당신이 요청했던 문자열이 버퍼보다 길다면(그것은, len-1 보다 길다), confstr은 단지 그 만큼( 널 종료 문자를 위한 공간은 남기고. )만 저장한다. 당신은 confsr이 len보다 크거나 같은값을 반환했을 때 그와같은 일이 발생했다는 것을 알 수 있다.
 
다음의 errno는 이 함수를 위해 정의된 에러상황이다.
EINVAL : parameter 값이 유효하지 않다.

다음은 confstr로 읽을 수 있는 단지 한 개의 파라미터이다.

_CS_PATH

이 파라미터의 값은 실행파일을 찾을 때 디폴트 경로에서 찾도록 한다. 이것은 로그인한 후에 사용자가 디폴트로 갖는 경로가 된다.
문자열 크기에 대한 제한 없이 confstr을 사용하는 방법은 그것을 두 번 호출하는 것이다. 첫 번째 호출은 길이를 얻고, 그것에 근거하여 버퍼를 할당하고 다시 confstr을 호출해서 버퍼를 채워라. 다음과 같이.
char *
get_default_path (void)
{
size_t len = confstr (_CS_PATH, NULL, 0);
char *buffer = (char *) xmalloc (len);
 
if (confstr (_CS_PATH, buf, len + 1) == 0)
{
free (buffer);
return NULL;
}
 
return buffer;
}


목차 이전 : 26. 시스템 정보 다음 : A 라이브러리에 있는 C 언어 기능들