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);
}