Создание каталога с помощью mknod()
Мне нужно создать каталог с помощью mknod()
(использование mkdir()
в моем случае это не разрешено), я бы вызвал программу из определенного каталога и указал путь, по которому новый каталог должен быть создан внутри предыдущего.
Пример: если я /home/user/test/
и внутри test
есть /level1/
Хочу создать каталог level2
внутри level1
так что я бы передал аргумент /level1/level2/
У меня есть следующий код, который работает, когда я создаю канал, но когда я меняю режим на S_IFDIR
ничего не делает.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>
void main(int argc,char *argv[]){
int status;
if ((status = mknod(argv[1], S_IFDIR,0)) == 1){
printf("error\n" );
}
exit(0);
}
2 ответа
mknod
обычно используется для создания узлов устройства (специальные каталоги).
Однако некоторые ОС поддерживают создание обычного каталога с mknod
(QNX).
Вы проверили страницу руководства для mknod в используемой ОС? Я совершенно уверен, что S_IFDIR
это непереносимая опция для mknod
,
В приведенном выше коде нет ничего плохого. Я столкнулся с этим в старой версии Unix, и mknod нуждался в эффективном идентификаторе root для создания каталога. Я подозреваю, что если вы вызвали perror("") после сбоя, вы получите что-то вроде "Не разрешено".