对于循环创建序列名称txt文件

时间:2019-09-10 07:33:43

标签: c file pointers

我想在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。

问题:此代码“安全”吗?

1 个答案:

答案 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,这将导致崩溃。因此,您需要处理该问题。