Funkcja read() a tablice wielowymiarowe

Odpowiedz Nowy wątek
2018-05-31 22:55
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.

edytowany 2x, ostatnio: furious programming, 2018-06-01 00:35
Kod wrzucaj w znaczniki kolorujące składnię, a nie w znaczniki cytatów. - furious programming 2018-06-01 00:35
Ok, zapamiętam. - nojaniewiem 2018-06-01 00:38

Pozostało 580 znaków

2018-05-31 22:57
kq
1

Opisz szerzej problem, bo teraz to jest zgaduj zgadula.


Pozostało 580 znaków

2018-05-31 23:24
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].

edytowany 1x, ostatnio: nojaniewiem, 2018-05-31 23:25

Pozostało 580 znaków

2018-05-31 23:26
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...

edytowany 1x, ostatnio: furious programming, 2018-06-01 00:36

Pozostało 580 znaków

2018-05-31 23:43
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().

edytowany 3x, ostatnio: nojaniewiem, 2018-06-01 01:56

Pozostało 580 znaków

2018-06-01 23:26
0

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

Powinno wystarczyć.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0