Использование функции чтения для чтения в файле - PullRequest
2 голосов
/ 28 апреля 2010

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;
}

Ответы [ 2 ]

5 голосов
/ 28 апреля 2010
  1. Вы назначаете указатель на char, а не char*.
  2. Вы читаете sizeof(char) (вероятно, 1 байт), а не 10240.
  3. Вы считываете данные во все, что buff, конвертируется в указатель, указывает на, а не в бафф.
  4. Проблема приоритета, упомянутая Игнасио Васкесом-Абрамсом, по-прежнему актуальна.
  5. Вы звоните strlen() на char, что не имеет особого смысла. Еще меньше, прежде чем заполнять то, что должно быть буфером.
  6. Вы присваиваете const char * (строковый литерал) для char*.

Разве в этом коде нет предупреждений компилятора?

4 голосов
/ 28 апреля 2010

== имеет более высокий приоритет, чем =:

if((fd = open(filename, O_RDWR)) == -1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...