我有这个简单的代码:
int read_data(int GrNr) {
//many lines of code
fprintf(fdatagroup, "%i", Ngroups);
return 0;
}
int main(int argc, char **argv) {
for(NUM=NUM_MIN;NUM<=NUM_MAX;NUM++) {
sprintf(groupfile,"../output/profiles/properties_%03d.txt", NUM);
fdatagroup = fopen(groupfile,"w");
GROUP=0;
accept=0;
do {
check=read_data(GROUP);
printf("check = %d \n", check);
accept++;
FOF_GROUP++;
}
while (accept<=n_of_halos);
fclose(fdatagroup);
}
printf("Everything done.\n");
return 0;
}
如果我没有手动创建输出目录中名为“profiles”的文件夹,我会得到
错误:Segmentation fault (core dumped)
如果文件夹在那里,一切正常。 如何才能从代码中创建目录? 我在linux中使用gcc。 感谢。
答案 0 :(得分:1)
正如一些背景知识,当fopen尝试打开不存在的文件而不是失败时,它只返回NULL。当您尝试读取/写入空指针时,会发生seg错误。
目录的创建和销毁属于sys / dir.h领域。
#include <sys/dir.h>
...
mkdir(path_str);
答案 1 :(得分:1)
在Linux上:
#include <sys/stat.h>
#include <sys/types.h>
mkdir("/path/to/dir", 0777); // second argument is new file mode for directory (as in chmod)
您还应该始终检查您的功能是否失败。 fopen
如果无法打开文件,则返回NULL并设置errno
; mkdir
(以及返回int
的大多数其他系统调用)返回-1
并设置errno
。您可以使用perror
打印出包含错误字符串的消息:
#include <errno.h>
if(mkdir("/path", 0777) < 0 && errno != EEXIST) { // we check for EEXIST since maybe the directory is already there
perror("mkdir failed");
exit(-1); // or some other error handling code
}