Bir dizinin varlığını kontrol eden bir program yazmak istiyorum; bu dizin yoksa, dizini ve içinde bir günlük dosyası oluşturur, ancak dizin zaten mevcutsa, o klasörde yalnızca yeni bir günlük dosyası oluşturur.
Bunu Linux ile C'de nasıl yaparım?
Bir dizinin varlığını kontrol eden bir program yazmak istiyorum; bu dizin yoksa, dizini ve içinde bir günlük dosyası oluşturur, ancak dizin zaten mevcutsa, o klasörde yalnızca yeni bir günlük dosyası oluşturur.
Bunu Linux ile C'de nasıl yaparım?
Yanıtlar:
stat
Dizinin var olup olmadığını kontrol etmek için bakın ,
Ve mkdir
bir dizin oluşturmak için.
#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);
}
Bu işlevlerin kılavuzunu man 2 stat
ve man 2 mkdir
komutları ile görebilirsiniz.
mkdir
Linux altında buna mode
ek olarak ikinci bir parametreye ihtiyaç duyduğuna inanıyorum path
.
Mkdir kullanabilirsiniz:
#include <sys/stat.h>
#include <sys/types.h>
int result = mkdir("/home/me/test.txt", 0777);
Dizini (...) oluşturan ve içinde bir (...) dosyası olan bir program yazmak istiyorum
çünkü bu çok yaygın bir sorudur, burada birden çok dizin seviyesi oluşturmak ve fopen'i çağırmak için kod. Hata mesajını printf ile yazdırmak için bir gnu uzantısı kullanıyorum.
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);
}