.\" This manpage is Copyright (C) 1992 Drew Eckhardt; .\" and Copyright (C) 1993 Michael Haardt .\" and Copyright (C) 1993,1994 Ian Jackson .\" and Copyright (C) 2006, 2014, Michael Kerrisk .\" .\" %%%LICENSE_START(GPL_NOVERSION_ONELINE) .\" You may distribute it under the terms of the GNU General .\" Public License. It comes with NO WARRANTY. .\" %%%LICENSE_END .\" .\" Modified 1996-08-18 by urs .\" Modified 2003-04-23 by Michael Kerrisk .\" Modified 2004-06-23 by Michael Kerrisk .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .\" .\" Japanese Version Copyright (c) 1997 SUTO, Mitsuaki .\" all rights reserved. .\" Translated 1997-06-26, SUTO, Mitsuaki .\" Updated & Modified 1999-03-01, NAKANO Takeo .\" Updated & Modified 2001-06-04, Yuichi SATO .\" Updated & Modified 2003-07-26, Yuichi SATO .\" Updated & Modified 2004-12-31, Yuichi SATO .\" Updated 2005-09-06, Akihiro MOTOKI .\" .TH MKNOD 2 2014\-02\-21 Linux "Linux Programmer's Manual" .SH 名前 mknod, mknodat \- 特殊ファイルや通常のファイルを作成する .SH 書式 .nf \fB#include \fP \fB#include \fP \fB#include \fP \fB#include \fP .sp \fBint mknod(const char *\fP\fIpathname\fP\fB, mode_t \fP\fImode\fP\fB, dev_t \fP\fIdev\fP\fB);\fP .sp \fB#include \fP/* AT_* 定数の定義 */ \fB#include \fP .sp \fBint mknodat(int \fP\fIdirfd\fP\fB, const char *\fP\fIpathname\fP\fB, mode_t \fP\fImode\fP\fB, dev_t \fP\fIdev\fP\fB);\fP .fi .sp .in -4n glibc 向けの機能検査マクロの要件 (\fBfeature_test_macros\fP(7) 参照): .in .sp \fBmknod\fP(): .ad l .RS 4 _BSD_SOURCE || _SVID_SOURCE || _XOPEN_SOURCE\ >=\ 500 || _XOPEN_SOURCE\ &&\ _XOPEN_SOURCE_EXTENDED .RE .ad .SH 説明 システムコール \fBmknod\fP() は \fIpathname\fP という名前のファイルシステム・ノード (ファイル、デバイススペシャルファイル、名前付きパイプ) を、 属性 \fImode\fP と \fIdev\fP の指定にしたがって作成する。 \fImode\fP 引き数には、作成するノードの許可属性 (permission) とタイプを指定する。 \fImode\fP の指定は以下にあげるファイルタイプのうちの 1 つと、 許可属性の組合せ (ビットごとの OR を使用) で行う。 許可属性は通常通り、プロセスの \fIumask\fP によって修正され、作成されたノードの許可属性は \fI(mode & ~umask)\fP となる。 .\" (S_IFSOCK since Linux 1.2.4) ファイルタイプには \fBS_IFREG\fP, \fBS_IFCHR\fP, \fBS_IFBLK\fP, \fBS_IFIFO\fP, \fBS_IFSOCK\fP のいずれかを指定しなければならない。 それぞれ順に、通常のファイル (空のファイルとして作成される)・ キャラクタスペシャルファイル・ブロックスペシャルファイル・ FIFO (名前付きパイプ)・UNIX ドメインソケットである (ファイルタイプ 0 は \fBS_IFREG\fP と同じである)。 ファイルタイプが \fBS_IFCHR\fP または \fBS_IFBLK\fP のとき、 \fIdev\fP には作成するデバイススペシャルファイルのメジャー番号と マイナー番号を指定する (\fBmakedev\fP(3) は \fIdev\fP のこれらの番号を作成する際に役立つだろう)。 それ以外の場合は \fIdev\fP は無視される。 \fIpathname\fP が既に存在する場合、またはシンボリックリンクの場合、 この呼び出しは \fBEEXIST\fP エラーで失敗する。 .\" .\" 新しく作成されたノードの所有者はプロセスの実効ユーザ ID にセットされる。 新たに作られたノードを保持する 親ディレクトリの set\-group\-ID ビットがセットされていたり、 ファイルシステムが BSD のグループセマンティクスにしたがって マウントされている場合には、新しいノードのグループ所有権は親ディレクトリの グループ所有権を継承する (親ディレクトリと同じになる)。 また、そうでなかった場合の所有グループはプロセスの実効グループ ID となる。 .SS mknodat() \fBmknodat\fP() システムコールは \fBmknod\fP() と全く同様に動作するが、以下で説明する点が異なる。 \fIpathname\fP で指定されたパス名が相対パスの場合、このパス名はファイルディスクリプター \fIdirfd\fP が参照するディレクトリに対する相対パスと解釈される (\fBmknod\fP() に相対パス名を渡した場合のように、呼び出したプロセスのカレントワーキングディレクトリに対する相対パスではない)。 \fIpathname\fP で指定されたパス名が相対パスで、 \fIdirfd\fP が特別な値 \fBAT_FDCWD\fP の場合、 (\fBmknod\fP() と同様に) \fIpathname\fP は呼び出したプロセスのカレントワーキングディレクトリに対する相対パスと解釈される。 \fIpathname\fP で指定されたパス名が絶対パスの場合、 \fIdirfd\fP は無視される。 .PP \fBmknodat\fP() の必要性についての説明については \fBopenat\fP(2) を参照。 .SH 返り値 \fBmknod\fP() と \fBmknodat\fP() は成功した場合 0 を、失敗した場合 \-1 を返す (失敗した場合 \fIerrno\fP がエラーの内容にしたがってセットされる)。 .SH エラー .TP \fBEACCES\fP プロセスが親ディレクトリへの書き込み許可を持たない。 もしくはパス名 \fIpathname\fP 中のディレクトリ部分のどれかに検索許可属性が無い (\fBpath_resolution\fP(7) も参照すること)。 .TP \fBEDQUOT\fP ディスクブロックか inode がそのファイルシステムのユーザクォータに達していた。 .TP \fBEEXIST\fP \fIpathname\fP がすでに存在する。 これには \fIpathname\fP がシンボリックリンクである場合も含まれる (シンボリックリンクがリンク切れか (dangling) どうかは関係ない)。 .TP \fBEFAULT\fP \fIpathname\fP がそのプロセスのアクセス可能なアドレス空間の外を指している。 .TP \fBEINVAL\fP \fImode\fP が通常のファイル・デバイススペシャルファイル・FIFO・ソケット以外を 作成するようにセットされている。 .TP \fBELOOP\fP パス名 \fIpathname\fP を解決するときに、含まれているシンボリックリンクが多すぎた。 .TP \fBENAMETOOLONG\fP \fIpathname\fP が長過ぎる。 .TP \fBENOENT\fP \fIpathname\fP 中のディレクトリ部分が存在しない、 もしくはリンク先の無いシンボリックリンクである。 .TP \fBENOMEM\fP 十分なカーネルメモリが無い。 .TP \fBENOSPC\fP \fIpathname\fP のあるデバイスに新たにノードを作成する空きが無い。 .TP \fBENOTDIR\fP \fIpathname\fP 中のディレクトリ要素が、実際にはディレクトリでない。 .TP \fBEPERM\fP .\" For UNIX domain sockets and regular files, EPERM is returned only in .\" Linux 2.2 and earlier; in Linux 2.4 and later, unprivileged can .\" use mknod() to make these files. \fImode\fP は通常のファイル・FIFO (名前付きパイプ)・UNIX ドメインソケット以外を 作成するようにセットされているが、実行者が特権 (Linux では \fBCAP_MKNOD\fP ケーパビリティ (capability)) を持っていない。 または \fIpathname\fP を保持するファイルシステムが、指定されたノード形式をサポートしていない。 .TP \fBEROFS\fP \fIpathname\fP が読み出し専用ファイルシステム上のファイルを指している。 .PP \fBmknodat\fP() では以下のエラーも発生する。 .TP \fBEBADF\fP \fIdirfd\fP が有効なファイルディスクリプタでない。 .TP \fBENOTDIR\fP \fIpathname\fP が相対パスで、 \fIdirfd\fP がディレクトリ以外のファイルを参照しているファイルディスクリプタである。 .SH バージョン \fBmknodat\fP() はカーネル 2.6.16 で Linux に追加された。 ライブラリによるサポートはバージョン 2.4 で glibc に追加された。 .SH 準拠 .\" The Linux version differs from the SVr4 version in that it .\" does not require root permission to create pipes, also in that no .\" EMULTIHOP, ENOLINK, or EINTR error is documented. \fBmknod\fP(): SVr4, 4.4BSD, POSIX.1\-2001 (下記も参照), POSIX.1\-2008. \fBmknodat\fP(): POSIX.1\-2008. .SH 注意 POSIX.1\-2001 では次のように書いている: 「\fBmknod\fP() の唯一の移植性のある使用法は、FIFO スペシャルファイルを作成することである。 \fImode\fP が \fBS_IFIFO\fP ではない場合、または \fIdev\fP が 0 ではない場合、 \fBmknod\fP() の挙動は規定されていない。」 しかしながら、現在ではこの目的のために \fBmknod\fP() を使用すべきではない。この目的のために特別に定義された関数である \fBmkfifo\fP() を使用すべきである。 .\" and one should make UNIX domain sockets with socket(2) and bind(2). Linux では、ディレクトリを作成するために \fBmknod\fP() を使用することはできない。 ディレクトリは \fBmkdir\fP(2) で作成すべきである。 NFS を実現しているプロトコルには多くの不備が存在し、 それらのいくつかは \fBmknod\fP() と \fBmknodat\fP() に影響を与える。 .SH 関連項目 \fBchmod\fP(2), \fBchown\fP(2), \fBfcntl\fP(2), \fBmkdir\fP(2), \fBmknodat\fP(2), \fBmount\fP(2), \fBsocket\fP(2), \fBstat\fP(2), \fBumask\fP(2), \fBunlink\fP(2), \fBmakedev\fP(3), \fBmkfifo\fP(3), \fBpath_resolution\fP(7) .SH この文書について この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.65 の一部 である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man\-pages/ に書かれている。