我想在Linux下以O.S.在for循环中创建N个文件; 这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
FILE *ptr;
char name[25];
for (int i = 0; i < 10; i++) {
snprintf(name, sizeof(name), "File_Nr%d.txt", i);
ptr = fopen(name, "w");
if( ptr == NULL ){
perror("Error creating file!");
}
fclose(ptr);
}
return 0;
}
它起作用并创建File_Nr0.txt到File_Nr9.txt。
问题:此代码“安全”吗?
答案 0 :(得分:3)
也许因为只想创建文件,所以可以直接使用open()
系统调用,该系统调用具有更多选项和更易读的IMO表示方式。
int fd = open(name, O_WRONLY|O_CREAT|O_TRUNC,
S_IWUSR | S_IRUSR | S_IWGRP | S_IRGRP | S_IROTH);
or
int fd = creat(name, 0644) // consider it to be an alias for above.
如果文件已经存在时要失败,
int fd = open(name, O_WRONLY|O_CREAT|O_TRUNC|O_EXCL, 0644);
在fopen()
中,您可以使用'x'
参数中的mode
来实现。
ptr = fopen(name, "wx");
正如@xception所提到的,当出现问题时,您应该返回一个非零的错误代码。
if (NULL == ptr) {
perror("...");
return -1; // or better the errno which was set by open() call..
}
在您的代码中,即使在失败的情况下,您也尝试关闭ptr
,这将导致崩溃。因此,您需要处理该问题。