将文件'filename'读入字符缓冲区'text'

时间:2013-12-18 12:14:03

标签: c bash shell command

我想知道如何从Bash shell中的命令行运行此C代码?

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

/* Size of character buffer to read in a file. */
#define BUFFSIZE 1000000

/* Read file 'filename' into character buffer 'text'.*/

long read_file(char *filename, char *text ) {
FILE *fp   = fopen(filename, "r");
   long  size = 0; // Number of characters read.
   len  = 0;

if (fp == NULL) {
    fprintf(stderr, 
            "Error could not open file: %s\n", 
            strerror(errno));
    return -1;
}

/* Go to the end of the file. */
if (fseek(fp, 0L, SEEK_END) == 0) {
    /* Get the size of the file. */
    size = ftell(fp);
    if (size == -1) {
        fprintf(stderr, 
                "Error could not open file: %s\n",
                 strerror(errno));
        return -1;
    }

    /* Go back to the start of the file. */
    if (fseek(fp, 0L, SEEK_SET) != 0) {
        fprintf(stderr, 
                "Error rewinding to start of file: %s\n",
                 strerror(errno));
        return -1;
    }

    /* Read the entire file into memory. */
    len = fread(text, sizeof(char), (size_t)size, fp);
    if (len == 0) {
        fprintf(stderr, 
                "Error reading file into memory: %s\n", 
                 strerror(errno));
        return -1;
    } else {
       text[++len] = '\0'; /* Add a null-terminator. */
    }
}
(void)fclose(fp);
return size;
}

因此,文件中的所有代码都不确定我使用的命令,因为我已经使用过:chmod + x filename使它可以运行然后我输入了./filename来运行但只是得到错误信息所以有我正在做的事情我只是不知道它是什么

3 个答案:

答案 0 :(得分:1)

你编译了你的代码吗?试试gcc <file.c> -o <outputName>

答案 1 :(得分:0)

我只收到一些错误消息。首先,strerrorerrno需要以下标题:

#include <errno.h>
#include <string.h>

然后len未声明类型:

int len  = 0;

之后,你需要main:

int main() {
   // do something
}

答案 2 :(得分:0)

您需要更少关注文件的大小,更多地关注您正在编写的缓冲区的大小(您可能会删除不属于输入text的数据)。除了fread将返回读取的字节数。

考虑一下:

size_t read_file(char *filename, char *text, size_t len)
{
    size_t rc = -1;
    FILE *fp = fopen(filename, "r");
    if (fp)
    {
        rc = fread(text, sizeof(char), len, fp);
        text[rc - 1] = '\0'; /* force null termination */
        fclose(fp);
    }
    else
    {
        fprintf(stderr, "Error could not open %s: %s\n",
                filename, strerror(errno));
    }
    return rc;
}

然后是一个示例电话:

int main()
{
    size_t len;
    char buffer[1024];
    len = read_file("file.txt", buffer, sizeof(buffer));
    /* more code here */
    return 0;
}