Quiero escribir un programa que (...) crea el directorio y un archivo (...) dentro de él
debido a que esta es una pregunta muy común, aquí está el código para crear múltiples niveles de directorios y luego llamar a fopen. Estoy usando una extensión GNU para imprimir el mensaje de error con 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);
}