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:
statDizinin var olup olmadığını kontrol etmek için bakın ,
Ve mkdirbir 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 statve man 2 mkdirkomutları ile görebilirsiniz.
mkdirLinux altında buna modeek 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);
}