fclear 또는 fclear64 서브루틴

용도

파일에 구멍을 뚫습니다.

라이브러리

표준 C 라이브러리(libc.a)

구문

off_t fclear ( FileDescriptor,  NumberOfBytes)
int FileDescriptor;
off_t NumberOfBytes;

off64_t fclear64 ( FileDescriptor,  NumberOfBytes)
int FileDescriptor;
off64_t NumberOfBytes;

설명

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 연결 시간이 초과되었습니다.