LINUX.ORG.RU

Использование массивов в системном вызове read ( )

 


0

1

В одной книге по программированию есть объявление системного вызова read ():

ssize_t read (int fd, void *buf, size_t len);

Далее автор приводит пример правильного применения этого системного вызова:

ssize_t ret;
while (len != 0 && (ret = read (fd, buf, len)) != 0) {
    if (ret == –1) {
        if (errno == EINTR)
            continue;
        perror ("read");
        break;
    }
    len -= ret;
    buf += ret;
}

У меня вопрос: можно ли использовать в таком примере в качестве buf массив? Если да, то как? А то, если я использую массив, то при компиляции последней строки цикла появляется сообщение:

error: invalid operands to binary + (have ‘char[2]’ and ‘ssize_t’)

gcc version 4.7.2 (Debian 4.7.2-5)


char ary[128];
char *buf = ary;
size_t len = sizeof(ary);

Далее тот код.

anonymous
()

Суть в том, что если массив у тебя объявлен как

int a[SIZE];
а не
int *a;
То ты не можешь просто так сделать
a += b;
Но ничего не мешает тебе объявить указатель и присвоить ему адрес начала массива.

Aswed ★★★★★
()

Всем спасибо!

xilun
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.