Funkcja read() a tablice wielowymiarowe

0

Witam. Ponownie zwracam się do Was z prośbą o pomoc. Prosiłbym o wyjaśnienie, jak użyć funkcji read() dla tablicy dwuwymiarowej. Szukałem w internecie, lecz nie znalazłem odpowiedzi. Napisałem coś takiego:

bytes_read=read(bufor->share[bufor->begin], buf, sizeof(buf));

ale kompilator zwraca błąd Bad file descriptor.

1

Opisz szerzej problem, bo teraz to jest zgaduj zgadula.

0

Bufor jest strukturą, która zawiera tablicę dwuwymiarową share oraz dwa elementy int: begin, który wskazuje na początek bufora oraz end, który wskazuje na jego koniec. Przez begin i end rozumiem wartości wymiaru po lewej stronie.
Całość ma działać w ten sposób, że zapisuję całą tablicę pod np. bufor->share[0] (tj. od bufor->share[0][0] do np. bufor->share[0][14]), przeskakuję do bufor->share[1], zapisuję, i tak aż do np. bufor->share[4][14].

2
bytes_read=read(bufor->share[bufor->begin], buf, sizeof(buf));

ale kompilator zwraca błąd "Bad file descriptor".

Co nie jest chyba dziwne, bo przecież pierwszym argumentem jest file deskryptor, a Ty jak rozumiem przekazujesz sobie jakieś z kosmosu wartości...

0

@kapojot: Faktycznie, masz rację.
Mógłbyś może doradzić, jak skopiować zawartość takiego bufora do innego bufora tak, by móc uniknąć skopiowania tablicy śmieci (podejrzewam, że zwykła pętla z przypisaniem może doprowadzić do czegoś takiego)? Czy istnieje funkcja podobna do read(), ale mogąca czytać z tablicy i zwracać liczbę odczytanych bitów?

EDIT: Nie wiem, czy to dobre rozwiązanie, ale użyłem strcpy() oraz później strlen().

0

man 2 read
man 3 memcpy
man 3 strlcpy
man 3 strncpy

Powinno wystarczyć.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.