使用read函数读入文件

时间:2010-04-28 10:58:10

标签: c

gcc 4.4.1

我正在使用read函数读取wave文件。但是,当它进入读取功能时。执行似乎停止并冻结。我想知道我是否做错了。

文件大小test-short.wave是:514K。

我的目标是一次将文件读入内存缓冲区块。目前我只是测试它。

非常感谢任何建议,

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <fcntl.h>
#include <string.h>
#include <unistd.h>

int main(void)
{
    char buff = malloc(10240);
    int32_t fd = 0;
    int32_t bytes_read = 0;

    char *filename = "test-short.wav";

    /* open wave file */
    if((fd = (open(filename, O_RDWR)) == -1))
    {
        fprintf(stderr, "open [ %s ]\n", strerror(errno));  
        return 1;
    }
    printf("Opened file [ %s ]\n", filename);
    printf("sizeof(buff) [ %d ]\n", sizeof(buff));

    bytes_read = read(fd, buff, sizeof(buff));

    printf("Bytes read [ %d ]\n", bytes_read);

    return 0;
}

===编辑更正===

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <fcntl.h>
#include <string.h>
#include <unistd.h>

int main(void)
{
    char buff[10240] = {0};
    int32_t fd = 0;
    int32_t bytes_read = 0;
    const char *filename = "test-short.wav";

    fd = open(filename, O_RDWR);
    if(fd == -1)
    {
    fprintf(stderr, "open [ %s ]\n", strerror(errno));
    return 1;
    }

    printf("sizeof(buff) [ %d ]\n", sizeof(buff));
    printf("strlen(buff) [ %d ]\n", strlen(buff));

    bytes_read = read(fd, buff, sizeof(buff));
    printf("Bytes read [ %d ]\n", bytes_read);

    return 0;
}

2 个答案:

答案 0 :(得分:5)

  1. 您指定了char,而不是char*
  2. 您阅读sizeof(char)(可能是1个字节),而不是10240。
  3. 您将数据读入任何buff,转换为指针,指向,而不是buff。
  4. Ignacio Vazquez-Abrams提到的优先问题仍然具有现实意义。
  5. 你在char上调用strlen(),这没什么意义。在填充应该是缓冲区之前更少。
  6. 您将const char *(字符串文字)分配给char*
  7. 此代码周围是否没有编译器警告?

答案 1 :(得分:4)

==的优先级高于=

if((fd = open(filename, O_RDWR)) == -1)