fclear 또는 fclear64 서브루틴
용도
파일에 구멍을 뚫습니다.
라이브러리
표준 C 라이브러리(libc.a)
구문
설명
Fclear 및 fclear64 서브루틴은 FileDescriptor 매개변수에 지정된 파일의 현재 파일 포인터에서 시작하여 NumberOfBytes 매개변수에 지정된 바이트 수를 0으로 합니다. 시스템에NFS네트워크 파일 시스템)가 설치되어 있는 경우 이 파일은 다른 노드에 있을 수 있습니다.
' fclear 하위 루틴은 파일의 ' OFF_MAX ' 바이트까지만 지울 수 있지만 ' fclear64 최대 파일 크기까지 지울 수 있습니다.
프로세스가 O_DEFER 모드로 연 파일에는 fclear 및 fclear64 하위 루틴을 적용할 수 없습니다.
다음 중 하나라도 참이면 fclear 및 fclear64 서브루틴이 성공적으로 완료되면 파일의 SetUserID 비트(S_ISUID)가 지워집니다:
- 호출 프로세스에 루트 사용자 권한이 없습니다.
- 호출 프로세스의 유효 사용자 ID가 파일의 사용자 ID와 일치하지 않습니다.
- 파일은 그룹(S_IXGRP) 또는 기타(S_IXOTH)에서 실행할 수 있는 파일입니다.
이 서브루틴은 또한 다음과 같은 경우 SetGroupID 비트(S_ISGID)를 지웁니다:
- 파일이 유효 그룹 ID 또는 프로세스의 보조 그룹 ID 중 하나와 일치하지 않습니다,
또는
- 파일은 소유자(S_IXUSR) 또는 다른 사용자(S_IXOTH)가 실행할 수 있는 파일입니다.참고: 오류가 감지되기 전에 파일의 데이터가 수정되었기 때문에 서브루틴이 실패하더라도 SetUserID 및 SetGroupID 비트의 지우기가 발생할 수 있습니다.
대용량 파일 지원 프로그래밍 환경에서는 fclear가 fclear64 재정의됩니다.
매개변수
| 항목 | 설명 |
|---|---|
| FileDescriptor | FileDescriptor 매개변수로 지정된 파일이 쓰기를 위해 열려 있어야 함을 나타냅니다. FileDescriptor 파일을 식별하기 위해 파일 이름 대신 사용되는 작은 양의 정수입니다. 이 함수는 파일 시스템에 이진 0의 전체 블록을 반환하여 파일에 구멍을 만든다는 점에서 논리적으로 동등한 쓰기 작업과 다릅니다. |
| NumberOfBytes | 탐색 포인터가 전진하는 바이트 수를 나타냅니다. 파일 끝에서 fclear 및 fclear64 하위 루틴을 사용하면 파일의 나머지 부분이 지워지고 탐색 포인터가 NumberOfBytes 전진합니다. 파일 크기가 이 새 구멍을 포함하도록 업데이트되어 현재 파일 위치가 새 파일 끝 포인터 바로 너머 바이트에 남습니다. |
리턴 값
성공적으로 완료되면 NumberOfBytes 값이 반환됩니다. 그렇지 않으면 -1 값이 반환되고 errno 전역 변수가 오류를 나타내도록 설정됩니다.
오류 코드
다음 중 하나 이상에 해당하면 fclear 및 fclear64 하위 루틴이 실패합니다:
| 항목 | 설명 |
|---|---|
| EIO | 입출력 오류. |
| EBADF | FileDescriptor 값이 쓰기 위해 열려 있는 유효한 파일 설명자가 아닙니다. |
| EINVAL | 파일이 일반 파일이 아닙니다. |
| EMFILE | 파일은 하나 이상의 프로세스에 의해 O_DEFER로 매핑됩니다. |
| EAGAIN | 파일에 강제 쓰기 잠금이 적용되어 fclear 하위 루틴의 쓰기 작업이 실패했습니다. |
| 항목 | 설명 |
|---|---|
| EFBIG | 현재 오프셋에 NumberOfBytes 더한 값이 FileDescriptor 연결된 열린 파일 설명에 설정된 오프셋 최대값을 초과합니다. |
| 항목 | 설명 |
|---|---|
| EFBIG | 프로세스의 파일 크기 제한 또는 최대 파일 크기를 초과하는 파일을 쓰려고 시도했습니다. 사용자가 프로세스를 실행하기 전에 환경 변수 XPG_SUS_ENV=ON을 설정한 경우, 프로세스의 파일 크기 제한을 초과하면 프로세스에 SIGXFSZ 신호가 게시됩니다. |
시스템에 NFS 설치되어 있는 경우 다음과 같은 경우 fclear 및 fclear64 하위 루틴도 실패할 수 있습니다:
| 항목 | 설명 |
|---|---|
| ETIMEDOUT | 연결 시간이 초과되었습니다. |