printf, fprintf, sprintf, snprintf, wsprintf, vprintf, vfprintf, vsprintf, vwsprintf 또는 vdprintf 서브루틴
용도
형식화된 출력을 인쇄합니다.
라이브러리
표준 C 라이브러리 (libc.a) 또는 128비트 long double이 있는 표준 C 라이브러리 (libc128.a)
구문
#include <stdio.h>
int printf (Format, [Value, ...])
const char *Format;
int fprintf (Stream, Format, [Value, ...])
FILE *Stream;
const char *Format;
int sprintf (String, Format, [Value, ...])
char *String;
const char *Format;
int snprintf (String, Number, Format, [Value, . . .])
char *String;
int Number;
const char *Format; #include <stdarg.h>
int vprintf (Format, Value)
const char *Format;
va_list Value;
int vfprintf (Stream, Format, Value)
FILE *Stream;
const char *Format;
va_list Value;
int vsprintf (String, Format, Value)
char *String;
const char *Format;
va_list Value;
int vdprintf (fildes, Format, Value);
int fildes;
const char *Format;
va_list Value; #include <wchar.h>
int vwsprintf (String, Format, Value)
wchar_t *String;
const char *Format;
va_list Value;
int wsprintf (String, Format, [Value, ...])
wchar_t *String;
const char *Format; 설명
printf 서브루틴은 Format 매개변수의 제어 하에 표준 출력 스트림으로 Value 매개변수 값을 변환, 형식화 및 기록합니다. printf 서브루틴은 코드 포인트 및 wchar_t 와이드 문자 코드를 처리하기 위한 변환 유형을 제공합니다.
fprintf 서브루틴은 Format 매개변수의 제어 하에 Stream 매개변수로 지정된 출력 스트림으로 Value 매개변수 값을 변환, 형식화 및 기록합니다. 이 서브루틴은 코드 포인트 및 wchar_t 와이드 문자 코드를 처리하기 위한 변환 유형을 제공합니다.
sprintf 서브루틴은 Format 매개변수의 제어 하에 String 매개변수로 지정된 주소에서 시작하여 Value 매개변수 값을 연속 바이트로 변환, 형식화 및 저장합니다. sprintf 서브루틴은 끝에 널 문자 (\0) 를 배치합니다. 형식화된 문자열을 포함하기에 충분한 스토리지 공간이 사용 가능한지 확인해야 합니다. 이 서브루틴은 코드 포인트 및 wchar_t 와이드 문자 코드를 처리하기 위한 변환 유형을 제공합니다.
snprintf 서브루틴은 Format 매개변수의 제어 하에 있는 Value 매개변수 값을 String 매개변수로 지정된 주소에서 시작하여 연속 바이트로 변환, 형식화 및 저장합니다. snprintf 서브루틴은 끝에 널 문자 (\0) 를 배치합니다. 형식화된 문자열을 포함하기에 충분한 스토리지 공간이 사용 가능한지 확인해야 합니다. 이 서브루틴은 코드 포인트 및 wchar_t 와이드 문자 코드를 처리하기 위한 변환 유형을 제공합니다. snprintf 서브루틴은 String 매개변수에 의해 참조되는 버퍼의 크기를 나타내는 Number 매개변수가 추가된 sprintf 서브루틴과 동일합니다.
wsprintf 서브루틴은 Format 매개변수의 제어 하에 Value 매개변수 값을 String 매개변수로 지정된 주소에서 시작하는 연속적인 wchar_t 문자로 변환, 형식화 및 저장합니다. wsprintf 서브루틴은 끝에 널 문자 (\0) 를 배치합니다. 호출 프로세스는 형식화된 문자열을 포함하기에 충분한 스토리지 공간이 사용 가능한지 확인해야 합니다. 필드 너비 단위는 wchar_t 문자 수로 지정됩니다. wsprintf 서브루틴은 wsprintf 서브루틴의 String 매개변수가 wchar_t 와이드 문자 코드의 스트링을 사용한다는 점을 제외하면 printf 서브루틴과 동일합니다.
위의 모든 서브루틴은 varargs 매크로의 가변 길이 인수 기능을 사용하여 _doprnt 서브루틴을 호출하여 작동합니다.
vdprintf, vprintf, vfprintf, vsprintf및 vwsprintf 서브루틴은 varargs 매크로 매개변수 리스트를 형식화하고 기록합니다. 이러한 서브루틴은 각각 drpintf, printf, fprintf, sprintf, snprintf및 wsprintf 서브루틴과 동일합니다. 단, 변수 수의 매개변수로 호출되지 않습니다. 대신, varargs 매크로에 의해 정의된 대로 매개변수 목록 포인터를 사용하여 호출됩니다.
매개변수
- 번호
- 복사하거나 변환할 문자열의 바이트 수를 지정합니다.
- 값
- Format 매개변수의 오브젝트에 직접 맵핑되는 0개이상의 인수를 지정합니다.
- 스트림
- 출력 스트림을 지정합니다.
- 문자열
- 시작 주소를 지정합니다.
- 형식
- 두 가지 유형의 오브젝트를 포함하는 문자열입니다.
- 출력 스트림에 복사되는 일반 문자입니다.
- 값 매개변수 목록에서 각각 0개이상의 항목을 검색하는 변환 스펙. vprintf, vfprintf, vsprintf및 vwsprintf 서브루틴의 경우, 각 변환 스펙으로 인해 varargs 매크로 매개변수 리스트에서 0개이상의 항목이 검색됩니다.
값 매개변수 목록에 Format 매개변수에 대한 충분한 항목이 포함되어 있지 않으면 결과를 예측할 수 없습니다. 전체 Format 매개변수가 처리된 후에도 더 많은 매개변수가 남아 있으면 서브루틴은 이를 무시합니다.
Format 매개변수의 각 변환 스펙에는 다음 요소가 있습니다.
- % (퍼센트 부호).
- 0개이상의 옵션. 변환 스펙의 의미를 수정합니다. 옵션 문자와 해당 의미는 다음과 같습니다.
- '
- i, d, u, f, g 및 G 10진수변환의 결과인 정수 부분을 1000ands_sep 그룹화 문자로 형식화합니다. 기타 변환의 경우 동작이 정의되지 않습니다. 이 옵션은 비통화 그룹화 문자를 사용합니다.
- -
- 필드 내에서 변환 결과를 왼쪽으로 맞춥니다.
- +
- 부호가 있는 변환의 결과를+(더하기 부호) 또는 - (빼기 부호) 로 시작합니다.
- 공백 문자
- 부호 있는 변환의 첫 번째 문자가 부호가 아닌 경우 결과에 공백 문자를 접두부로 붙입니다. 공백 문자와 + 옵션 문자가 모두 표시되면 공백 문자 옵션은 무시됩니다.
- #
- 값을 대체 양식으로 변환합니다. c, d, s및 u 변환의 경우 이 옵션은 적용되지 않습니다. o 변환의 경우, 결과의 첫 번째 숫자가 0이 되도록 정밀도를 증가시킵니다. x 및 X 변환의 경우 0이 아닌 결과에는 0x 또는 0X 접두부가 있습니다. e, E, f, g및 G 변환의 경우 뒤에 숫자가 없더라도 결과에는 항상 소수점이 포함됩니다. g 및 G 변환의 경우 후행 0은 결과에서 제거되지 않습니다.
- 0
- d, i, o, u, x, X, e, E, f, g및 G 변환에 대해 선행 0 (부호 또는 기본 표시 다음) 으로 필드 너비를 채웁니다. 필드는 공백으로 채워지지 않습니다. 0 및 - 옵션이 모두 표시되면 0 옵션은 무시됩니다. d, i, o u, x및 X 변환의 경우 정밀도가 지정되면 0 옵션도 무시됩니다. 0 및 ' 옵션이 모두 표시되면 필드가 채워지기 전에 그룹화 문자가 삽입됩니다. 다른 변환의 경우 결과를 신뢰할 수 없습니다.
- B
- no-op 문자를 지정합니다.
- N
- no-op 문자를 지정합니다.
- J
- no-op 문자를 지정합니다.
- 최소 필드 폭을 지정하는 선택적 10진수 문자열. 변환된 값에 필드 폭보다 적은 수의 문자가 있는 경우, 필드는 필드 폭에서 지정하는 길이로 왼쪽에서 채워집니다. - (왼쪽 맞춤) 옵션이 지정되면 필드가 오른쪽에서 채워집니다.
- 선택적 정밀도. 정밀도는 입니다. (점)과 10진수 숫자 문자열을 차례로 연결한 것입니다. 정밀도가 지정되지 않은 경우 기본값은 0입니다. 정밀도는 다음 한계를 지정합니다.
- d, i, o, u, x또는 X 변환에 표시할 최소 자릿수입니다.
- e, E및 f 변환의 경우 소수점 뒤에 표시할 자릿수입니다.
- g 및 G 변환의 최대 유효 숫자 수입니다.
- s 및 S 변환의 문자열에서 인쇄할 최대 바이트 수입니다.
- S 변환에서 인쇄할 wchar_t 배열에서 변환된 최대 바이트 수입니다. 완전한 문자만 인쇄됩니다.
- 선택적 l (소문자 L), ll (소문자 LL), h또는 L 지정자는 다음 중 하나를 표시합니다.
- 후속 d, i, u, o, x또는 X 변환 지정자가 short int 또는 unsigned short int Value 매개변수에 적용되도록 지정하는 선택적 h (매개변수는 정수 승격에 따라 승격됩니다. 해당 값은 인쇄 전에 short int 또는 unsigned short int 로 변환됩니다.)
- 후속 n 변환 지정자가 short int 매개변수에 대한 포인터에 적용되도록 지정하는 선택적 h .
- 후속 d, i, u, o, x또는 X 변환 지정자가 long int 또는 unsigned long int 매개변수에 적용되도록 지정하는 선택적 l (소문자 L).
- 후속 n 변환 지정자가 long int 매개변수에 대한 포인터에 적용되도록 지정하는 선택적 l (소문자 L).
- 후속 d, i, u, o, x또는 X 변환 지정자가 long long int 또는 unsigned long long int 매개변수에 적용되도록 지정하는 선택적 ll (소문자 LL).
- 후속 n 변환 지정자가 long long int 매개변수에 대한 포인터에 적용되도록 지정하는 선택적 ll (소문자 LL).
- 다음 e, E, f, g또는 G 변환 지정자가 long double 매개변수에 적용되도록 지정하는 선택적 L 입니다. libc.a와 링크된 경우, long double 은 double (64bits) 과 동일합니다. libc128.a 및 libc.a로 링크된 경우, long double 은 128비트입니다.
- 선택적 H, D또는 DD 지정자는 다음 변환 중 하나를 표시합니다.
- 다음 e, E, f, F, g또는 G 변환 지정자가 _Decimal32 매개변수에 적용되도록 지정하는 선택적 H .
- 다음 e, E, f, F, g또는 G 변환 지정자가 _Decimal64 매개변수에 적용되도록 지정하는 선택적 D .
- 다음 e, E, f, F, g또는 G 변환 지정자가 _Decimal128 매개변수에 적용되도록 지정하는 선택적 DD .
- 선택적 vl, lv, vh, hv 또는 v 지정자는 다음 벡터 데이터 유형 변환 중 하나를 표시합니다.
- 다음 e, E, f, g, G, a또는 A 변환 지정자가 vector float 매개변수에 적용되도록 지정하는 선택적 v . 하나의 인수를 사용하고 데이터를 일련의 4바이트부동 소수점 구성요소로 해석합니다.
- c, d, i, u, o, x또는 X 변환 지정자가 vector signed char, vector unsigned char또는 vector bool char 매개변수에 적용되도록 지정하는 선택적 v 입니다. 하나의 인수를 사용하고 데이터를 일련의 16개의 1바이트구성요소로 해석합니다.
- 다음 d, i, u, o, x또는 X 변환 지정자가 vector signed int, vector unsigned int또는 vector bool 매개변수에 적용되도록 지정하는 선택적 vl 또는 lv 입니다. 하나의 인수를 사용하고 데이터를 일련의 4바이트정수 구성요소로 해석합니다.
- 다음 d, i, u, o, x또는 X 변환 지정자가 vector signed short 또는 vector unsigned short 매개변수에 적용되도록 지정하는 선택적 vh 또는 hv 입니다. 이는 하나의 인수를 사용하고 데이터를 일련의 8개의 2바이트정수 구성요소로 해석합니다.
- 선행 지정자의 경우 벡터 크기 지정자 바로 앞에 선택적 분리 문자를 지정할 수 있습니다. 구분 기호를 지정하지 않으면 변환이 c가 아닌 경우 기본 구분 기호는 공백입니다. 이 경우 기본 구분 기호는 널입니다. 지원되는 선택적 구분 기호 세트는
,(쉼표),;(세미콜론),:(콜론) 및_(밑줄) 입니다.
- 다음 문자는 적용될 변환 유형을 표시합니다.
- %
- 변환을 수행하지 않습니다. 인쇄 (%).
- d 또는 i
- 정수를 지정하는 Value 매개변수를 승인하고 이를 부호 있는 10진수표기로 변환합니다. 정밀도는 표시할 최소 자릿수를 지정합니다. 변환되는 값을 더 적은 수의 숫자로 표시할 수 있는 경우 앞에 0을 사용하여 확장됩니다. 디폴트 정밀도는 1입니다. 정밀도가 0인 값 0을 변환한 결과는 널 (NULL) 문자열입니다. 선행 문자로 0이 있는 필드 너비를 지정하면 필드 너비 값이 선행 0으로 채워집니다.
- u
- 부호 없는 정수를 지정하는 Value 매개변수를 승인하고 이를 부호 없는 10진수표기법으로 변환합니다. 정밀도는 표시할 최소 자릿수를 지정합니다. 변환되는 값을 더 적은 수의 숫자로 표시할 수 있는 경우 앞에 0을 사용하여 확장됩니다. 디폴트 정밀도는 1입니다. 정밀도가 0인 값 0을 변환한 결과는 널 (NULL) 문자열입니다. 선행 문자로 0이 있는 필드 너비를 지정하면 필드 너비 값이 선행 0으로 채워집니다.
- O
- 부호 없는 정수를 지정하는 Value 매개변수를 승인하고 이를 부호 없는 8진표기법으로 변환합니다. 정밀도는 표시할 최소 자릿수를 지정합니다. 변환되는 값을 더 적은 수의 숫자로 표시할 수 있는 경우 앞에 0을 사용하여 확장됩니다. 디폴트 정밀도는 1입니다. 정밀도가 0인 값 0을 변환한 결과는 널 (NULL) 문자열입니다. 선행 문자로 0이 있는 필드 너비를 지정하면 필드 너비 값이 선행 0으로 채워집니다. 필드 폭에 대한 8진수 값은 포함되지 않습니다.
- x 또는 X
- 부호 없는 정수를 지정하는 Value 매개변수를 승인하고 이를 부호 없는 16진표기법으로 변환합니다. 문자 abcdef 는 x 변환에 사용되고 문자 ABCDEF 는 X 변환에 사용됩니다. 정밀도는 표시할 최소 자릿수를 지정합니다. 변환되는 값을 더 적은 수의 숫자로 표시할 수 있는 경우 앞에 0을 사용하여 확장됩니다. 디폴트 정밀도는 1입니다. 정밀도가 0인 값 0을 변환한 결과는 널 (NULL) 문자열입니다. 선행 문자로 0이 있는 필드 너비를 지정하면 필드 너비 값이 선행 0으로 채워집니다.
- F
- double을 지정하는 Value 매개변수를 승인하고 이를 [-]ddd.ddd형식의 10진수표기로 변환합니다. 소수점 뒤의 자릿수는 정밀도 스펙과 같습니다. 정밀도가 지정되지 않으면 6자리숫자가 출력됩니다. 정밀도가 0이면 소수점이 표시되지 않습니다.
- e 또는 E
- double을 지정하는 Value 매개변수를 승인하고 이를 지수 양식 [-]d.ddde+/ -dd로 변환합니다. 소수점 앞에 하나의 숫자가 있고 소수점 뒤의 숫자 수는 정밀도 스펙과 같습니다. 정밀도 스펙은 0-17자리의 범위에 있을 수 있습니다. 정밀도가 지정되지 않으면 6자리숫자가 출력됩니다. 정밀도가 0이면 소수점이 표시되지 않습니다. E 변환 문자는 지수 앞에 e 대신 E 가 있는 숫자를 생성합니다. 지수에는 항상 최소한 두 개의 자리수가 포함됩니다.
- g 또는 G
- Double을 지정하는 Value 매개변수를 승인하고 유효 숫자 수를 지정하는 정밀도를 사용하여 e, E또는 f 변환 문자의 스타일로 변환합니다. 후행 0은 결과에서 제거됩니다. 소수점 뒤에 숫자가 있는 경우에만 소수점이 표시됩니다. 사용된 스타일은 변환된 값에 따라 다릅니다. 스타일 e (' G '이 사용된 플래그인 경우E)은 변환 결과 지수가 ' -4' 보다 작거나 정밀도보다 크거나 같은 경우에만 발생합니다. 명시적 정밀도가 0이면 1로 간주됩니다.
- c
- unsigned char 데이터 유형으로 변환된 정수를 지정하는 Value 매개변수를 승인하고 인쇄합니다.
- c
- wchar_t 와이드 문자 코드를 지정하는 Value 매개변수를 승인하고 인쇄합니다. Value 매개변수로 지정된 wchar_t 와이드 문자 코드는 문자를 나타내는 바이트 배열로 변환되고 해당 문자가 기록됩니다. Value 매개변수는 wsprintf 서브루틴을 사용할 때 변환 없이 기록됩니다.
- s
- Value 매개변수를 문자열 (문자 포인터) 로 승인하고 널 문자 (\0) 가 발견되거나 정밀도에 의해 표시된 바이트 수에 도달할 때까지 문자열의 문자가 인쇄됩니다. 정밀도가 지정되지 않으면 첫 번째 널 문자까지의 모든 바이트가 인쇄됩니다. Value 매개변수로 지정된 문자열 포인터에 널값이 있으면 결과를 신뢰할 수 없습니다.
- S
- 해당 Value 매개변수를 wchar_t 문자열에 대한 포인터로 승인합니다. 문자열의 문자는 널 문자 (\0) 가 발견되거나 정밀도로 표시된 와이드 문자 수에 도달할 때까지 (변환 없이) 인쇄됩니다. 정밀도가 지정되지 않은 경우에는 첫 번째 널 문자까지의 모든 문자가 인쇄됩니다. Value 매개변수로 지정된 문자열 포인터의 값이 널이면 결과를 신뢰할 수 없습니다.
- p
- void에 대한 포인터를 승인합니다. 포인터 값은 부호 없는 16진수 (x) 와 동일하게 인쇄 가능한 일련의 문자로 변환됩니다.
- n
- 이 호출에 의해 출력 스트림에 기록되는 문자 수 ( wsprintf 서브루틴의 경우 와이드 문자 코드) 가 기록되는 정수에 대한 포인터를 승인합니다. 인수는 변환되지 않습니다.
필드 너비 또는 정밀도는 숫자 문자열 대신 * (별표) 로 표시할 수 있습니다. 이 경우, 정수 Value 매개변수는 필드 너비 또는 정밀도를 제공합니다. 출력을 위해 변환된 Value 매개변수는 변환 문자에 도달할 때까지 검색되지 않으므로 필드 너비 또는 정밀도를 지정하는 매개변수는 변환될 값 (있는 경우) 앞에 표시되어야 합니다.
변환 결과가 필드 너비보다 넓은 경우 변환된 결과를 포함하도록 필드가 확장되고 잘리지 않습니다. 그러나 작은 필드 너비 또는 정밀도로 인해 오른쪽이 잘릴 수 있습니다.
printf, fprintf, sprintf, snprintf, wsprintf, vprintf, vfprintf, vsprintf또는 vwsprintf 서브루틴을 사용하여 출력 문자열에 언어 종속 기수 문자를 삽입할 수 있습니다. 기수 문자는 프로그램 로케일의 LC_NUMERIC 범주에 있는 언어 특정 데이터에 의해 정의됩니다. C 로케일 또는 기수 문자가 정의되지 않은 로케일에서 기수 문자의 기본값은 a입니다. .
이러한 서브루틴이 성공적으로 실행된 후, 그리고 동일한 스트림 또는 exit 또는 abort 서브루틴에서 fclose 또는 fflush 서브루틴에 대한 호출의 다음 성공적인 완료 전에,st_ctime및st_mtime파일의 필드가 갱신 대상으로 표시됩니다.
e, E, f, g및 G 변환 지정자는 다음과 같이 특수 부동 소수점 값을 나타냅니다.
| 항목 | 설명 |
|---|---|
| 자동 NaN | +NaNQ 또는 -NaNQ |
| 신호 NaN | +NaNS 또는 -NaNS |
| +/-INF (+/-INF) | +INF 또는 -INF |
| +/-0 | +0 또는 -0 |
+(더하기 부호) 의 표시는 + 또는 공백 문자 형식화 옵션이 지정되었는지 여부에 따라 다릅니다.
이러한 서브루틴은 시스템이 변수 순서로 매개변수 목록의 요소를 처리할 수 있도록 하는 형식 문자열을 처리할 수 있습니다. 이 경우 일반 변환 문자% (퍼센트 부호) 는 %digit$로 대체됩니다. 여기서 digit 는 1- NL_ARGMAX 값 범위의 10진수입니다. 그런 다음 변환은 사용하지 않는 다음 인수가 아닌 지정된 인수에 적용됩니다. 이 기능은 특정 언어에 적합한 순서로 형식 문자열의 정의를 제공합니다. 변수 순서 지정이 사용되는 경우 정밀도의 필드 너비에 대한 * (별표) 스펙은 %digit$로 대체됩니다. 변수 순서 지정 기능을 사용하는 경우 모든 변환에 대해 이를 지정해야 합니다.
다음 기준이 적용됩니다.
- NLS 확장에 전달된 형식은 변환 형식 또는 명시적 또는 암시적 인수 번호를 포함할 수 있습니다. 그러나 이러한 양식은 %% (이중 퍼센트 부호) 를 제외하고 단일 형식 문자열 내에서 혼합할 수 없습니다.
- n 값에는 선행 0이 없어야 합니다.
- %n$ 이 사용되는 경우, %1$ - %n- 1$ (포함) 를 사용해야 합니다.
- %n$ 의 n 은 1부터 NL_ARGMAX 값까지의 범위에 있습니다. NL_ARGMAX 값에 대한 자세한 정보는 limits.h 파일을 참조하십시오.
- 인수 목록에서 번호가 매겨진 인수는 필요한 횟수만큼 참조할 수 있습니다.
- 필드 너비 또는 정밀도에 대한 * (별표) 스펙은 변수 순서 %n$ 형식에서 허용되지 않습니다. 대신 *m$ 형식이 사용됩니다.
리턴 값
성공적으로 완료되면 printf, fprintf, vprintf및 vfprintf 서브루틴은 전송된 바이트 수를 리턴합니다 ( sprintf및 vsprintf 서브루틴의 경우 널 문자 [\0] 을 포함하지 않음). 오류가 발생하면 음수 값이 출력됩니다.
성공적으로 완료되면 snprintf 서브루틴은 String 매개변수에 기록된 바이트 수를 리턴합니다 (종료 널 바이트 제외). 출력이 Number 매개변수의 길이를 초과하여 출력 문자가 삭제되면, snprintf 서브루틴은 Number 매개변수가 충분히 큰 경우 (종료 널 바이트 제외) String 매개변수에 기록된 바이트 수를 리턴합니다.
성공적으로 완료되면 wsprintf 및 vwsprintf 서브루틴은 전송된 와이드 문자 수를 리턴합니다 (와이드 문자 널 문자 [\0] 을 포함하지 않음). 오류가 발생하면 음수 값이 출력됩니다.
오류 코드
printf, fprintf, sprintf, snprintf또는 wsprintf 서브루틴은 Stream 매개변수로 지정된 파일이 버퍼되지 않거나 버퍼를 비워야 하고 다음 중 하나 이상이 참인 경우 실패합니다.
| 항목 | 설명 |
|---|---|
| 다시 (EAGAIN) | O_NONBLOCK 또는 O_NDELAY 플래그는 Stream 또는 String 매개변수로 지정된 파일을 기반으로 하는 파일 설명자에 대해 설정되며 프로세스는 쓰기 조작에서 지연됩니다. |
| EBADF | Stream 또는 String 매개변수로 지정된 파일의 기반이 되는 파일 디스크립터가 쓰기를 위해 열린 올바른 파일 디스크립터가 아닙니다. |
| EFBIG (EFBIG) | 이 프로세스의 파일 크기 한계 또는 최대 파일 크기를 초과하는 파일에 쓰려고 시도했습니다. 자세한 정보는 ulimit 서브루틴을 참조하십시오. |
| EINTR | 신호 수신으로 인해 쓰기 조작이 종료되었으며 데이터가 전송되지 않았거나 부분 전송이 보고되지 않았습니다. 주: 애플리케이션이 바인드되는 라이브러리 루틴에 따라 이 서브루틴은 EINTR을 리턴할 수 있습니다. sa_restart에 관한 signal 서브루틴을 참조하십시오.
|
| 항목 | 설명 |
|---|---|
| EIO | 프로세스가 제어 터미널에 쓰기를 수행하려고 시도하는 백그라운드 프로세스 그룹의 구성원이며, TOSTOP 플래그가 설정되고, 프로세스가 SIGTTOU 신호를 무시하거나 차단하지 않으며, 프로세스의 프로세스 그룹에 상위 프로세스가 없습니다. |
| ENOSPC | 파일을 포함하는 디바이스에 여유 공간이 남아 있지 않습니다. |
| 오버플로우 | UNIX03 모드에서 Number 매개변수의 값이 INT_MAX값보다 큰 경우 snprintf 또는 vsnprintf 서브루틴은 실패합니다. 주: XPG_SUS_ENV 환경 변수의 값이 ON으로 설정된 경우 UNIX03 작동이 사용 가능합니다.
|
| EPIPE | 프로세스에서 읽기 위해 열려 있지 않은 파이프 또는 선입선출 (FIFO) 에 쓰려고 시도했습니다. SIGPIPE 신호가 프로세스로 전송됩니다. |
printf, fprintf, sprintf, snprintf또는 wsprintf 서브루틴은 다음 중 하나 이상이 참인 경우 실패할 수 있습니다.
| 항목 | 설명 |
|---|---|
| EILSEQ | 올바르지 않은 문자 시퀀스가 발견되었습니다. |
| EINVAL | Format 매개변수가 충분하지 않은 인수를 수신했습니다. |
| ENOMEM | 사용 가능한 스토리지 공간이 충분하지 않습니다. |
| ENXIO | 존재하지 않는 디바이스에서 요청이 작성되었거나 요청이 디바이스의 기능 외부에 있습니다. |
예
다음 예제는 vfprintf 서브루틴을 사용하여 오류 루틴을 작성하는 방법을 보여줍니다.
#include <stdio.h>
#include <stdarg.h>
/* The error routine should be called with the
syntax: */
/* error(routine_name, Format
[, value, . . . ]); */
/*VARARGS0*/
void error(char *fmt, . . .);
/* ** Note that the function name and
Format arguments cannot be **
separately declared because of the **
definition of varargs. */ {
va_list args;
va_start(args, fmt);
/*
** Display the name of the function
that called the error routine */
fprintf(stderr, "ERROR in %s: ",
va_arg(args, char *)); /*
** Display the remainder of the message
*/
fmt = va_arg(args, char *);
vfprintf(fmt, args);
va_end(args);
abort(); }