umask 함수는 커널 함수인가요?

umask 함수는 커널 함수인가요?

나는 그 umask()기능이 다음과 같다고 가정한다.

종종 변수라고 불리는 쉘 함수를 포함합니다.파일 생성 마스크

umask()그러나 그것은 쉘 함수가 아니고 그러한 변수를 포함하지 않기 때문에 틀렸습니다 .

umask()함수가 "쉘 함수"가 아닌 경우 "커널 함수"라고 명명할 수 있나요?

답변1

umask 매뉴얼에는 다음과 같이 나와 있습니다.

fork(2)를 통해 생성된 하위 프로세스는 상위 프로세스의 umask를 상속합니다. execve(2)는 umask를 변경하지 않고 그대로 둡니다.

따라서 exec(execve)를 호출한 후에도 지속되기 때문에 모든 exec 호출이 실행 중인 프로그램을 대체하므로(커널에 저장된 특정 구조 제외) 커널에서 구현되어야 합니다.

답변2

당신이 의미하지 않는 한 "커널 기능"과 같은 것은 없습니다이것.

umask(2)는시스템 호출. ~부터시간의 새벽[1].

하지만 반드시 이렇게 될 필요는 없습니다. 실제 비트마스크를 항상 동일한 주소에 매핑되고 execve(2)를 통해 예약되는 메모리 블록의 일부로 만들고 open(2), creat를 사용하여 이를 달성할 수 있습니다. (2) 등등. 사용자 공간 래퍼는 거기에서 그것을 가져옵니다. 이것은 또한 POSIX와 호환됩니다.

[1] 원래 구현에서 u.u_cmask함수에 의해 설정된 필드는 "새 파일 만들기"의 다른 한 위치에서만 사용되었습니다.마크노드()기능.

관련 정보