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関数によって設定されたフィールドは、「新しいファイルの作成」の別の場所でのみ使用されました。マークノード()機能。

関連情報