Nowe posty

xx Problem ze sterownikami. (5)
2024-04-13, 21:25:16
xx Instalacja xfce4 (2)
2024-04-13, 16:20:17
xx Serie kompilacji bez instalacji dla “emerge” w Gentoo (2)
2024-04-08, 18:40:04
xx Plasma 6 w Neonie ssie trochę mniej ... (17)
2024-04-05, 10:03:46
xx Problem z Linux Lite po instalacji (3)
2024-04-03, 14:23:40
xx Jak właczyć num locka przy starcie systemu debian 12? (12)
2024-04-02, 17:43:54
xx Brak dźwieku w systemie. (5)
2024-04-02, 16:13:41
xx Dystrybucja pod HP Omen (7)
2024-03-29, 11:33:05
xx [Poradnik] Wyszukiwanie Sterowników (2)
2024-03-27, 21:08:23
xx Ile pingwinów? (1)
2024-03-27, 08:59:24

Autor Wątek: write(), read() problem  (Przeczytany 10999 razy)

xKomandosx

  • Gość
write(), read() problem
« dnia: 2006-05-03, 14:36:07 »
Instlowałem Debiana (po raz pierwszy)

przy wyborze X window system zaznaczylem domyslne SECA (czy jakos tak) wszystko z instalacja poszlo dobrze tyle ze jak sie linux juz mial uruchamiac to czarny ekran i zero grafiki

wzialem jeszcze raz install debiana i tym razem wybralem VGA no i teraz widac jakies srodowisko graficzne ale kolorow to cyba jest 16 a rozdz. 640x480

co mam zrobic zeby to wygladalo normalnie ?

Lorenzo

  • Gość
write(), read() problem
« Odpowiedź #1 dnia: 2006-05-03, 15:07:13 »
Możesz ustawić driver na vesa - standartowa SVGA. Ale najlepiej by było gdybyś wiedział na jakiej karcie jedziesz i ją ustawił.

xKomandosx

  • Gość
write(), read() problem
« Odpowiedź #2 dnia: 2006-05-03, 16:02:08 »
2006-05-03 15:07:13 Lorenzo napisał:

> Możesz ustawić driver na vesa - standartowa SVGA. Ale najlepiej by było gdybyś wiedział na
 > jakiej karcie jedziesz i ją ustawił.

ale jak to zrobic ?
moja karta grafiki (jesli o to chodzi) GeForce FX5200 64 MB

Lorenzo

  • Gość
write(), read() problem
« Odpowiedź #3 dnia: 2006-05-03, 19:37:18 »
Jesli masz Sarge\\'a :

dpkg-reconfigure xserver-xfree86

Jesli etch/sid/sarge+backports

dpkg-reconfigure xserver-xorg

i wybierz nv jako sterownik.
A najlerpiej bys zrobił budując moduły nvidii. Potrzebujesz do tego drivery ze strony nvidii i paczke kernel-headers-twoja_wersja_kernela

P.S. W przypadku etch/sid linux-headers-2.6.ileś_tam
Ponadto - wyszukiwarka z lewej, http://dug.net.pl. Wałkowane raz w tygodniu

nstn

  • Gość
write(), read() problem
« Odpowiedź #4 dnia: 2006-05-03, 13:30:56 »
Jestem nowy jesli chodzi o programowanie pod linuxem.
Zadano mi takie zadanie:
używając funkcji read należy pobrac 2 łancuchy znakow ze standardowego wejscia oraz wyswietlic ponownie lancuch zawierajacy wiekasza liczbe znakow. W przypadku gdy lancuchy sa rowne, nalezy wyswietlic oba. Do wyswietlenia danych uzyc funkcji write.

Przeczytalem znaleziony gdzies w necie opis funkcji read i write, ale nie wiem jak zastosowac to do tego zadania. Byc moze dla niektorych osob takie zadanie to pestka, ale moze pomogl by mi ktos zrobic to zadanie. Albo chociaz jakies przykladowe wykorzystanie write i read, ktore dotyczylo by mojego zadania.

chmooreck

  • Gość
write(), read() problem
« Odpowiedź #5 dnia: 2006-05-03, 14:02:14 »
2006-05-03 13:30:56 nstn napisał:

> Jestem nowy jesli chodzi o programowanie pod linuxem.
 > Zadano mi takie zadanie:
 > używając funkcji read należy pobrac 2 łancuchy znakow ze standardowego wejscia oraz wyswietlic
 > ponownie lancuch zawierajacy wiekasza liczbe znakow. W przypadku gdy lancuchy sa rowne, nalezy
 > wyswietlic oba. Do wyswietlenia danych uzyc funkcji write.
 >
 > Przeczytalem znaleziony gdzies w necie opis funkcji read i write, ale nie wiem jak zastosowac
 > to do tego zadania. Byc moze dla niektorych osob takie zadanie to pestka, ale moze pomogl by mi
 > ktos zrobic to zadanie. Albo chociaz jakies przykladowe wykorzystanie write i read, ktore
 > dotyczylo by mojego zadania.

http://rtfm.killfile.pl

C ?
masz to na jakies zadanie domowe ? jesli tak, to zapewne cala potrzebna wiedze ktos ci juz staral sie co najmniej raz przekazac - trzeba bylo uwazac...

a moze zaproponuj jakas wersje wyjsciowa ? przedyskutujemy razem... moze dojdziemy do czegos sensownego, a ty sie przynajniej choc troche nauczysz...

... na gotowe rozwiazanie raczej bym w tym miejscu nie liczyl ;-) chociaz z pewnoscia dla wielu stalych bywalcow zadanie to jest blahostka...

Lorenzo

  • Gość
write(), read() problem
« Odpowiedź #6 dnia: 2006-05-03, 14:27:43 »
Jak to nie wiesz. Pobierasz dane wejsciowe w postaci dwóch łańcuchów, sprawdzasz warunkiem długości i wypisujesz.
A tu o funkcjach read() i write()
man read
man 2 write

nstn

  • Gość
write(), read() problem
« Odpowiedź #7 dnia: 2006-05-03, 22:07:12 »
udalo mi sie do tej pory wymyslec cos takiego:

#include
#include
#include

int main()
{
size_t length;
char * buffer;
buffer=(char *)malloc(length);
ssize_t bytes_read;
int fd;

bytes_read = read(fd, buffer, length);
//wczytane dane wrzucimy do buffer

//tu trzeba dac warunki za pomoca if , a dalej write
write(fd, buffer, length);
return 0;
}


ale naprawde nie wiem jak mam pobrac dane wejsciowe (w postaci dwóch łańcuchów)

chmooreck

  • Gość
write(), read() problem
« Odpowiedź #8 dnia: 2006-05-03, 23:40:49 »
2006-05-03 22:07:12 nstn napisał:

 > size_t length;
 > char * buffer;
 > buffer=(char *)malloc(length);
 > ssize_t bytes_read;
 > int fd;
 >
 > bytes_read = read(fd, buffer, length);
 > //wczytane dane wrzucimy do buffer
 >
 > //tu trzeba dac warunki za pomoca if , a dalej write
 > write(fd, buffer, length);
 > return 0;
 > }

no i super...
nie sadzisz, ze zmienne trzebaby zainicjalizowac ?

czy uzycie read i write jest obligatoryjne (sa funkcje lepiej nadajce sie do twojego zadania) ?

dlaczego bufor alokujesz dynamicznie (nie oznacza to, ze jest to niepoprawne... tylko napisz dlaczego) ?
czy na pewno jeden bufor ci wystarczy ?

nstn

  • Gość
write(), read() problem
« Odpowiedź #9 dnia: 2006-05-04, 19:26:54 »
jak mam pobrac dane wejsciowe (w postaci dwóch łańcuchów)

bo tego w zasadzie nie wiem.

Z konsoli to bym uzyl cat zeby wpisac do pliku, a tu????

nstn

  • Gość
write(), read() problem
« Odpowiedź #10 dnia: 2006-05-04, 19:30:20 »
2006-05-03 23:40:49 chmooreck napisał:


 > czy uzycie read i write jest obligatoryjne (sa funkcje lepiej nadajce sie do twojego zadania)
 > ?
 >
 > dlaczego bufor alokujesz dynamicznie (nie oznacza to, ze jest to niepoprawne... tylko napisz
 > dlaczego) ?
 > czy na pewno jeden bufor ci wystarczy ?


1. read i write muszą byc uzyte
2. bufor alokuje dynamicznie bo nie wiem ile znakow bedzie mial ten ciąg znakow
3.byc moze potrzebowalbym dwoch buforow, w koncu mają byc dwa ciągi znakow
4. ale jak wprowadzic te dane? Nie kumam tego

jk33

  • Gość
write(), read() problem
« Odpowiedź #11 dnia: 2006-05-04, 20:25:22 »
2006-05-04 19:30:20 nstn napisał:

 > 2. bufor alokuje dynamicznie bo nie wiem ile znakow bedzie mial ten ciąg znakow

Mhm... Tylko, jeśli dobrze rozumiem, najpierw musisz wczytać ten ciąg, żeby
policzyć jego długość, więc jest tu problem...
Ponadto w Twoim kodzie nie wiadomo skąd bierzesz to length (jest deklaracja
zmiennej, ale gdzie nadajesz jej wartość?)

Nie masz w  specyfikacji zadania podanych jakiś maksymalnych długości ciągów?

Potrafisz napisać ten program uzywając stdio.h ?

chmooreck

  • Gość
write(), read() problem
« Odpowiedź #12 dnia: 2006-05-04, 20:37:53 »
2006-05-04 19:30:20 nstn napisał:

 > 2. bufor alokuje dynamicznie bo nie wiem ile znakow bedzie mial ten ciąg znakow

to teraz mi powiedz jakiej dlugosci bufor zaalokowales... bo nie daje mi to spokoju ;-)

 > 4. ale jak wprowadzic te dane? Nie kumam tego

poczytaj co to jest ten fd (file descriptor)...

j3drek

  • Gość
write(), read() problem
« Odpowiedź #13 dnia: 2006-05-04, 22:02:53 »
ja kiedys napisalem takie cos

zwraca zaalokowany dynamicznie lancuch, musisz go zwolnic za pomoca free() w bsize jest ilosc wczytanych danych
 
void *intobuff(int *bsize)
{
        if (!bsize)
                return NULL;

        char stat_b[1024];
        int stats = 1024;

        *bsize = 0;
        int s;
        char buf;
        s = 0;
        int g_size = 0;
        int w_size = 0;
        void *res = NULL;
        int end;
        while (1){
          fread(&buf, 1, 1, stdin);
                end = feof(stdin);
                if (!buf){
                        fprintf(stderr, "HTMLP: W buforze wejsciowym na pozycji %d pojawil sie znak konca pliku 0x0, a nie wczytano jescze wszystkiego!n", g_size);
                        end = 1;
                }
                stat_b = buf;
                if ( (s >= stats) || ( end ) ){
                        if (res){
                                res = realloc(res, g_size);
                        } else
                        {
                                if ( s < stats)
                                        res = malloc(s);
                                else
                                        res = malloc(stats);
                        }
                        memcpy(res + w_size, &stat_b[0], s);
                        w_size += s;
                        if (end)
                                break;
                }
                s++;
                g_size++;
                if (s > stats)
                        s = 0;
        }
        *bsize = g_size;
        return res;
}


troche to zagmatwane, i trzeba by to deczko przerobic ale moze sie przyda...

chmooreck

  • Gość
write(), read() problem
« Odpowiedź #14 dnia: 2006-05-04, 22:59:55 »
wydaje mi sie, ze autorowi zadania chodzilo o wykorzysztanie funkcji read i write, a nie automatyczna alokacje bufora odpowiedniej wielkosci ;-)