mknod()

Создать новую точку входа в файловую систему

Прототип:

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

Аргументы:

path
Имя, которое необходимо использовать для файла.
mode
Набор битов, определяющих тип файла и права доступа, которые необходимо использовать. Допустимые типы файлов:
S_IFDIR
создать каталог.
S_IFIFO
создать FIFO.
Для получения дополнительной информации см. Права доступа.
dev
Игнорируется.

Библиотека:

libc

Описание:

Функция mknod() создаёт файл с именем, заданным параметром path, используя тип файла, закодированный в параметре mode. Поддерживаемые типы файлов: каталоги и FIFO.


Note: Эта функция включена для повышения переносимости программного обеспечения, написанного для Unix-совместимых операционных систем. Для переносимости в рамках POSIX вместо этого используйте функции mkdir() или mkfifo().

Чтобы создать каталог с разрешениями на чтение-запись-выполнение для всех, можно использовать следующее:

mknod( name, S_IFDIR | 0777, 0 );

Возвращаемое значение:

0
Успешное завершение.
-1
Возникла ошибка. Код ошибки записан в errno.

Коды ошибок:

EACCES
Компонент префикса пути, заданного параметром path, не даёт разрешение на поиск или запись запрещена для родительского каталога.
EEXIST
Заданный файл уже существует.
ELOOP
Слишком много уровней символических ссылок или префиксов.
EMLINK
Количество ссылок родительского каталога превышает значение LINK_MAX.
ENAMETOOLONG
Длина строки path превышает значение PATH_MAX или длина компонента имени пути больше, чем значение NAME_MAX.
ENOENT
Компонент префикса имени, заданного параметром path, не существует или параметр path указывает на пустую строку.
ENOSPC
Каталог, который будет содержать новый файл, не может быть расширен или в файловой системе нет ресурсов для размещения файлов (то есть диск заполнен).
ENOSYS
Функция mknod() не реализована для файловой системы, заданной параметром path.
ENOTDIR
Компонент префикса имени, заданного параметром path, не является каталогом.
EROFS
Заданный файл находится в файловой системе, доступной только для чтения.

Примеры:

/*
* Create special files as a directory or FIFO
*/
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <unistd.h>
int main( int argc, char** argv )
{
int c;
mode_t mode = 0666;
int ecode = 0;
if ( argc == 1 )
{
printf( "Use: %s [-d directory] ... [-f fifo] ... \n", argv[0] );
return (0);
}
while ( ( c = getopt( argc, argv, "d:f:" )) != -1 )
{
switch ( c )
{
case 'd': mode = S_IFDIR | 0666; break;
case 'f': mode = S_IFIFO | 0666; break;
}
if ( mknod( optarg, mode, 0 ) != 0 )
{
perror( optarg );
++ecode;
}
}
return (ecode);
}

Классификация:

POSIX 1003.1 X/Open Systems Interfaces Extension

Безопасность использования
Точка остановки потока
Да
Обработчик прерываний
Нет
Обработчик сигналов
Да
В потоке
Да

Тематические ссылки:

errno, struct stat, mkdir(), mkfifo()




Предыдущий раздел: Описание API системной библиотеки