在Linux上用C如何生成大小为X的文件?

时间:2015-11-18 22:04:53

标签: c linux file

所以我想创建一个名为genData.c的文件,例如执行时:./ genData filename.txt会将1个字符写入该文件1000次。

本质上是创建1kb文件。 我希望能够修改for循环,比如100000次,生成1MB文件等等。

这是我尝试过的,它编译但是在执行时会导致分段错误。

有什么建议吗?对不起C是我从未涉足过的语言。

#include <stdio.h>

int main (int argc, char *argv) {
    char ch = 'A';
    FILE *fp;
    fp = fopen(argv[1], "wb");
    int i;

    for (i = 0; i < 1000; i++) {
        fwrite(&ch, sizeof(char), 1, fp);
    }

    fclose(fp);

    return 0;
}

3 个答案:

答案 0 :(得分:5)

如果您使用警告进行编译,则会得到有关确切问题的提示:

test.c:3:5: warning: second argument of ‘main’ should be ‘char **’ [-Wmain]
 int main (int argc, char *argv) {
     ^

所有麻烦都从此错误的下游开始。修复此参数,您的代码将起作用。

将来,养成打开警告的编译习惯:

$ gcc -Wall foo.c
...

这将有助于捕捉可能导致问题的拼写错误和其他奇怪现象。

答案 1 :(得分:0)

由于您将其标记为Linux,因此您可以使用系统级函数来执行此操作(这应该是一种正确,最有效的方法):

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sysexits.h>
#include <fcntl.h>
#include <string.h>

ssize_t             /* Write "n" bytes to a descriptor  */
writen(int fd, const void *ptr, size_t n);

int 
main (int argc, char** argv) {
  char buf[1000];
  memset(buf, 'A', sizeof(buf));
  int fd;
  if((fd = open(argv[1], O_WRONLY|O_CREAT, 0666))<0){
    perror(argv[1]);
    exit(EX_NOPERM);
  }
  ssize_t left = writen(fd, buf, sizeof(buf));
  if(left) 
    perror("write error\n"); 
  return !!left;
}

ssize_t             /* Write "n" bytes to a descriptor  */
writen(int fd, const void *ptr, size_t n) {
  size_t        nleft;
  ssize_t       nwritten;

  nleft = n;
  while (nleft > 0) {
    if ((nwritten = write(fd, ptr, nleft)) < 0) {
      if (nleft == n)
        return(-1); /* error, return -1 */
      else
        break;      /* error, return amount written so far */
    } else if (nwritten == 0) {
      break;
    }
    nleft -= nwritten;
    ptr   += nwritten;
  }
  return(n - nleft);      /* return >= 0 */
}

答案 2 :(得分:0)

#include <stdio.h>
#include <stdlib.h>

#define SIZE_OF_FILE  1024

int main(int argc, char *argv[])
{
     FILE *fdest;
     char ch = '\n';

     if(argc != 2)
          exit(EXIT_FAILURE);

     fdest = fopen(argv[1], "wb");
     if (fdest == NULL)
          exit(EXIT_FAILURE);

     fseek(fdest, SIZE_OF_FILE - 1, SEEK_CUR);
     fwrite(&ch, sizeof(char), 1, fdest);

     fclose(fdest);


     return 0;
}
  

本质上是创建1kb文件

如果唯一的目的是创建一个sizeof x的文件,我相信它会更简单。