MAKE_DEV(9)

名称
make_dev, make_dev_alias, destroy_dev, dev_depends - デバイスのための dev_t および DEVFS 登録の管理

書式
<sys/param.h> <sys/conf.h> dev_t make_dev(struct cdevsw *cdevsw, int minor, uid_t uid, gid_t gid, int perms, const char *fmt, ...) dev_t make_dev_alias(dev_t pdev, const char *fmt, ...) void destroy_dev(dev_t dev) void dev_depends(dev_t pdev, dev_t cdev)

解説
make_dev() 関数は新しいデバイスのための dev_t 構造体を作成します。 DEVFS が利用可能の場合には、新しいデバイスの存在も通知されます。 そのデバイスは uid によって所有され、 gid のグループに所有され、 name で指定される名前を持ちます。 perms に指定するファイルのパーミッションは <sys/stat.h> で定義されています。

    #define S_IRWXU 0000700    /* 所有者の RWX マスク
    #define S_IRUSR 0000400    /* 所有者の R */
    #define S_IWUSR 0000200    /* 所有者の W */
    #define S_IXUSR 0000100    /* 所有者の X */
    #define S_IRWXG 0000070    /* グループの RWX マスク */
    #define S_IRGRP 0000040    /* グループの R */
    #define S_IWGRP 0000020    /* グループの W */
    #define S_IXGRP 0000010    /* グループの X */
    #define S_IRWXO 0000007    /* その他の RWX マスク */
    #define S_IROTH 0000004    /* その他の R */
    #define S_IWOTH 0000002    /* その他の W */
    #define S_IXOTH 0000001    /* その他の X */
    #define S_ISUID 0004000    /* 実行時にユーザ ID を設定 */
    #define S_ISGID 0002000    /* 実行時にグループ ID を設定 */
    #define S_ISVTX 0001000    /* スティッキービット */
    #ifndef _POSIX_SOURCE
    #define S_ISTXT 0001000
    #endif

make_dev_alias() 関数は make_dev() から返された dev_t をとり、このデバイスのための別の名前 (別名) を作成します。 make_dev() の呼出しの前の make_dev_alias() の呼出しは、誤りです。

destroy_dev() 関数は make_dev() から返された dev_t をとり、そのデバイスの登録を削除します。 make_dev_alias() で作成されたデバイスで destroy_dev() を呼出さないでください。

dev_depends() 関数は 2 つのデバイス間の親子関係を確立します。 このネット効果は、親デバイスの destroy_dev() は、もしあれば、結果としてその子デバイスの破壊に終わります。 1 つのデバイスは同時に親にも子にもなれ、 そのため、完全な階層構造を構築することが可能です。

歴史
make_dev() および destroy_dev() 関数は FreeBSD 4.0 ではじめて登場しました。 関数 make_dev_alias() は FreeBSD 4.1 ではじめて登場しました。 関数 dev_depends() は FreeBSD 5.0. ではじめて登場しました。