C言語システムコール-mknod

システムコール

概要

mknodは特殊ファイル(デバイスファイル)及びFIFO(名前付きパイプ)などを作成します。

mknodコマンドやmkfifoコマンドなどで利用されるシステムコールとなります。

mknodは「make node」の略です。


指定できるファイルタイプは以下の通りです。

S_IFCHR キャラクタ型特殊ファイル
S_IFBLK ブロック型特殊ファイル
S_IFIFO FIFO(名前付きパイプ)
S_IFREG 空の通常ファイル
S_IFSOCK UNIXドメインソケット

サンプルプログラム


#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

/*!
 * @brief     キャラクタデバイスを作成する
 * @param[in] filepath  ファイルパス名
 * @return    0:success/-1:failure
 */
static int
create_chardev(char *filepath)
{
    int rc = 0;
    dev_t devnum = 0;

    /* デバイス番号を指定する */
    devnum = makedev(1, 3);

    rc = mknod(filepath, S_IFCHR|0666, devnum);
    if(rc < 0){
        printf("Error: mknod() %s: %s\n", strerror(errno), filepath);
        return(-1);
    }

    return(0);
}

int
main(int argc, char *argv[])
{
    int rc = 0;

    if(argc != 2){
        fprintf(stderr, "Usage: %s <path>\n", argv[0]);
        exit(EXIT_FAILURE);
    }

    rc = create_chardev(argv[1]);
    if(rc != 0) exit(EXIT_FAILURE);

    exit(EXIT_SUCCESS);
}


関連ページ