fopen - 原始数据作为C

时间:2015-10-01 18:48:11

标签: c fopen

我需要从存储到数组中的数据创建一个FILE结构。 在我的代码中,我有fopen函数,它返回一个FILE。想法是读取存储在数组中的所有数据,转换为FILE结构,最后返回FILE。

即:

FILE validFile (char *fileName){
     char *data;
     FILE *fp;

     data = malloc(sizeof(char*));

     populateData(data);

     fp = fopen(data, "r");

     return fp;
}

这可能吗?

谢谢和最诚挚的问候, 克里斯蒂安。

2 个答案:

答案 0 :(得分:2)

是的,这是可能的,虽然不是纯粹的C.如果你为像Linux这样的类Unix操作系统编程,你可以使用POSIX的fmemopen函数:

FILE validFile (char *fileName){
     char *data;
     FILE *fp;

     data = populateData();

     /* data_size is the length of the buffer */
     fp = fmemopen(data, data_size, "r");

     return fp;
}

答案 1 :(得分:-2)

我看到你发布的代码的另一个问题是fp是一个堆栈又名自动变量;一旦你的validFile()函数返回,fp超出了范围,它的值是未定义的。

如果您更改其存储类,它的范围,将其作为参数传递,使用fpmalloc()分配它,您可以返回calloc() ...例如,像这样的东西,例如:

FILE **validFile (char *fileName){
     char *data;
     FILE **fpp;

     if (fpp = (FILE **)calloc(1,sizeof(FILE *))) {

        data = (char *)malloc(sizeof(char*));

        populateData(data);

        if ((*fpp = fmemopen(data, data_size, "r"))) {

           /*
            */

        } else {

           /*
            */

        }

     } else {
        /*
         * calloc() failed...
         */
     }

     return *fpp;
}