Unix-system-calls-mknod

提供:Dev Guides
移動先:案内検索

[top]#

[[File:]]

[[File:]]

|Web |This Site

  • 初心者向けのUnix *
  • 高度なUnix *

選択した読書

Copyright©2014 by finddevguides

  Home     References     Discussion Forums     About TP  

mknod()-Unix、Linuxシステムコール

[[File:]] image :http://www.finddevguides.com/images/next.gif [next] image:http://www.finddevguides.com/add- this.gif [AddThisソーシャルブックマークボタン]

広告

NAME

mknod-特別なファイルまたは通常のファイルを作成します

概要

#include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> int mknod(const char* pathname, mode_t mode, dev_t dev);

説明

システムコール mknod ()は、_mode_および_dev_で指定された属性を使用して、_pathname_という名前のファイルシステムノード(ファイル、デバイススペシャルファイル、または名前付きパイプ)を作成します。

_mode_引数は、使用する許可と作成するノードのタイプの両方を指定します。 以下にリストされているファイルタイプのいずれかと、新しいノードの権限の組み合わせ(ビット単位のORを使用)である必要があります。

許可は、プロセスの umask によって通常の方法で変更されます。作成されたノードの許可は*(mode&〜umask)*です。

ファイルタイプは、 S_IFREGS_IFCHRS_IFBLKS_IFIFO 、または S_IFSOCK のいずれかである必要があり、通常のファイル(空で作成されます)、キャラクタースペシャルファイル、ブロックスペシャルファイル、FIFO(名前付きパイプ)、またはUnixドメインソケット、それぞれ。 (ファイルタイプがゼロの場合は、S_IFREGタイプと同等です。)

ファイルタイプが S_IFCHR または S_IFBLK の場合、_dev_は新しく作成されたデバイス特殊ファイルのメジャー番号とマイナー番号を指定します。それ以外の場合は無視されます。

_pathname_が既に存在する場合、またはシンボリックリンクである場合、この呼び出しはEEXISTエラーで失敗します。

新しく作成されたノードは、プロセスの有効なユーザーIDによって所有されます。 ノードを含むディレクトリにset-group-IDビットが設定されている場合、またはファイルシステムがBSDグループセマンティクスでマウントされている場合、新しいノードは親ディレクトリからグループ所有権を継承します。それ以外の場合は、プロセスの有効なグループIDによって所有されます。

返り値

*mknod* ()は成功すると0を返し、エラーが発生した場合は-1を返します(この場合、_errno_は適切に設定されます)。

エラー

Tag

説明

*EACCES*

親ディレクトリがプロセスへの書き込み許可を許可していないか、_pathname_のパスプレフィックス内のディレクトリの1つが検索許可を許可していません。 ( path_resolution (2)も参照してください。)

*EEXIST*

_pathname_はすでに存在します。

*EFAULT*

_pathname_は、アクセス可能なアドレス空間の外側を指します。

*EINVAL*

_mode_は、通常のファイル、デバイス特殊ファイル、FIFO、またはソケット以外の何かの作成を要求しました。

*ELOOP*

_pathname_の解決中に検出されたシンボリックリンクが多すぎます。

*ENAMETOOLONG*

_pathname_が長すぎました。

*ENOENT*

_pathname_のディレクトリコンポーネントが存在しないか、ダングリングシンボリックリンクです。

*ENOMEM*

カーネルメモリが不足していました。

*ENOSPC*

_pathname_を含むデバイスには、新しいノード用のスペースがありません。

*ENOTDIR*

_pathname_でディレクトリとして使用されるコンポーネントは、実際にはディレクトリではありません。

*EPERM*

_mode_は、通常のファイル、FIFO(名前付きパイプ)、またはUnixドメインソケット以外の作成を要求しましたが、呼び出し元には特権がありません(Linux: CAP_MKNOD 機能はありません)。 _pathname_を含むファイルシステムが要求されたノードのタイプをサポートしていない場合にも返されます。

*EROFS*

_pathname_は、読み取り専用ファイルシステム上のファイルを指します。

準拠

SVr4、4.4BSD、POSIX.1-2001(ただし、以下を参照)。

ノート

POSIX.1-2001は次のように述べています。「 mknod ()の唯一の移植可能な使用は、FIFO特殊ファイルを作成することです。 _mode_がS_IFIFOでない場合、または_dev_が0でない場合、 mknod ()の動作は指定されていません。

Linuxでは、この呼び出しを使用してディレクトリを作成することはできません。 mkdir (2)でディレクトリを作成し、 mkfifo (2)でFIFOを作成する必要があります。

NFSの基礎となるプロトコルには多くの不備があります。 これらのいくつかは mknod ()に影響します。

関連項目

[[File:]] image :http://www.finddevguides.com/images/next.gif [next] [[File:]]

広告

  
Advertisements