2010-04-28 228 views
2

gcc 4.4.1使用讀取功能讀取文件

我正在使用讀取函數來讀取波形文件。但是,當它到達閱讀功能。執行似乎停止並凍結。我想知道我是否在做這個問題。

文件大小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; 
} 
+0

咳嗽libsndfile咳嗽 – 2010-04-28 14:09:48

回答

5
  1. 您指定指向0123的指針,而不是char*
  2. 你讀sizeof(char)(可能是1字節),而不是10240.
  3. 你把數據讀入buff,轉換成指針,指向,而不是buff。
  4. Ignacio Vazquez-Abrams提到的優先級問題仍然相關。
  5. 您在char上調用strlen(),這沒有多大意義。在填充什麼應該是緩衝區之前更少。
  6. 您將const char *(字符串文字)分配爲char*

是不是編譯器警告蜂擁周圍此代碼?

+0

我做了更正。其實我編譯以下-Wall -Wextra -ggdb – ant2009 2010-04-28 15:33:53

+0

我希望編輯的代碼工作。也就是說,在輸出中給10240,10和10240(假設文件比較大,按照你的意思)。 – 2010-04-28 18:10:02

4

==的優先級高於=

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