Chcę napisać program, który sprawdza istnienie katalogu; jeśli ten katalog nie istnieje, tworzy katalog i plik dziennika w nim, ale jeśli katalog już istnieje, tworzy po prostu nowy plik dziennika w tym folderze.
Jak mam to zrobić w C z Linuksem?
Chcę napisać program, który sprawdza istnienie katalogu; jeśli ten katalog nie istnieje, tworzy katalog i plik dziennika w nim, ale jeśli katalog już istnieje, tworzy po prostu nowy plik dziennika w tym folderze.
Jak mam to zrobić w C z Linuksem?
Odpowiedzi:
Sprawdź, stat
czy katalog istnieje,
I mkdir
stworzyć katalog.
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
struct stat st = {0};
if (stat("/some/directory", &st) == -1) {
mkdir("/some/directory", 0700);
}
Możesz zobaczyć podręcznik tych funkcji za pomocą poleceń man 2 stat
i man 2 mkdir
.
mkdir
w Linuksie mode
oprócz path
.
Możesz użyć mkdir:
#include <sys/stat.h>
#include <sys/types.h>
int result = mkdir("/home/me/test.txt", 0777);
Chcę napisać program, który (...) tworzy katalog i (...) plik w nim
ponieważ jest to bardzo częste pytanie, oto kod do tworzenia wielu poziomów katalogów, a następnie wywoływania fopen. Używam rozszerzenia gnu, aby wydrukować komunikat o błędzie za pomocą printf.
void rek_mkdir(char *path) {
char *sep = strrchr(path, '/');
if(sep != NULL) {
*sep = 0;
rek_mkdir(path);
*sep = '/';
}
if(mkdir(path, 0777) && errno != EEXIST)
printf("error while trying to create '%s'\n%m\n", path);
}
FILE *fopen_mkdir(char *path, char *mode) {
char *sep = strrchr(path, '/');
if(sep) {
char *path0 = strdup(path);
path0[ sep - path ] = 0;
rek_mkdir(path0);
free(path0);
}
return fopen(path,mode);
}