mknod()

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

Прототип:

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

Аргументы:

path
The pathname that you want to use for the file.
mode
A set of bits that define the file type and access permissions that you want to use. The valid file types are:
S_IFDIR
create a directory.
S_IFIFO
create a FIFO.
For more information, see Access permissions.
dev
Ignored.

Библиотека:

libc

Описание:

The mknod() makes a file, named path, using the file type encoded in the mode argument. Supported file types are directories and FIFOs.


Note: This function is included to enhance portability with software written for Unix-compatible operating systems. For POSIX portability, use mkdir() or mkfifo() instead.

To make a directory with read-write-execute permissions for everyone, you could use the following:

mknod( name, S_IFDIR | 0777, 0 );

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

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

Коды ошибок:

EACCES
A component of the path prefix denies search permission, or write permission is denied for the parent directory.
EEXIST
The named file already exists.
ELOOP
Too many levels of symbolic links or prefixes.
EMLINK
The link count of the parent directory would exceed LINK_MAX.
ENAMETOOLONG
The length of the path string exceeds PATH_MAX, or a pathname component is longer than NAME_MAX.
ENOENT
A component of the path prefix doesn't exist, or the path arguments points to an empty string.
ENOSPC
The directory that would contain the new file cannot be extended or the filesystem is out of file allocation resources (that is, the disk is full).
ENOSYS
The mknod() function isn't implemented for the filesystem specified in path.
ENOTDIR
A component of the path prefix isn't a directory.
EROFS
The named file resides on a read-only filesystem.

Примеры:

/*
* 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 XSI

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

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

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




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