Nowe posty

Autor Wątek: Pomoc w znalezieniu błędu w kodach plików ( +wyjaśnienie kodu )  (Przeczytany 6597 razy)

inteligencik

  • Gość
Witam,
chciałbym prosić o pomoc w rozszyfrowaniu treści poniższych plików programowych (dopisanie komentarzy z wyjaśnieniem jak co działa) oraz znalezienie błędu ponieważ nie chcą się uruchomić programy wynikowe.

to co wpisuje do pliku makefile:
zad5: zad_5_2_producent.o zad_5_2_konsument.o
        g++ zad_5_2_producent.o zad_5_2_konsument.o -o zad5

zad_5_2_producent.o: zad_5_2_producent.cpp
        g++ -c zad_5_2_producent.cpp -o zad_5_2_producent.o

zad_5_2_konsument.o: zad_5_2_konsument.cpp
        g++ -c zad_5_2_konsument.cpp -o zad_5_2_konsument.o

pierwszy plik:
Kod: C [Zaznacz]

#include
#include
#include
#include
#include
#include
#include
#include

int main( int argc, char* argv[])
{
if ( argc != 2 ) {printf("Zła liczba parametrów\\n");return -1;}
char* chars=argv[1];//tablica znaków z której generujemy paczke
size_t num_chars = strlen(chars);//ilo¶ć znaków

int fileid=open("fifo", O_WRONLY );
if ( fileid == -1 ){printf("error\\n");return -1;}

fcntl( fileid, F_SETFL, O_NONBLOCK );

srand(time(0));

printf ("Zadanie 5.2 - producent");

int pack_num,pack_size;
while ( true )
{
printf("Podaj ilo¶ć paczek: ");
scanf("%d", &pack_num);
if ( pack_num == 0) break;
printf("Podaj wielko¶ć paczki: ");
scanf("%d", &pack_size);
if ( pack_size == 0 ) break;

char *pack=(char *) malloc(pack_size);

for ( int pack_id=1; pack_id<=pack_num; pack_id++)
{
for ( int i=0; i printf("Paczka #%d, zapisuje: ", pack_id);
//jesli nie moze zapisac calej paczki zapisuje j± na raty
int saved_bytes=0;
do
{
int num_bytes=write(fileid, pack+saved_bytes, pack_size-saved_bytes);
//gdy write zglosi blad lub nic nie zapisze
if ( num_bytes == 0 ) {free(pack);printf("Brak aktywnego konsumenta\\n");return 0;};
if ( num_bytes == -1 )
{
if (errno == EAGAIN) sleep(1);continue;
free( pack );printf("Bł±d podczas próby zapisu\\n");return -1;
}
saved_bytes+=num_bytes;
printf("%d ", num_bytes);
fflush(stdout);
}while ( saved_bytes < pack_size );
printf("Zapisano\\n");
}

free(pack);
pack=0;
// fsync(fileid);

}
close(fileid);
printf("Żegnam\\n");
return 0;
}



Drugi plik:
Kod: c [Zaznacz]

#include
#include
#include
#include
#include
#include

int main( int argc, char* argv[])
{
// if ( argc != 2 ) {printf("Zła liczba parametrów\\n");return -1;}

int fileid=open("fifo", O_RDONLY );
if ( fileid == -1 ){printf("error\\n");return -1;}

printf("Zadanie 5.2 - konsument\\n");

int pack_num,pack_size;
while ( true )
{
printf("Podaj ilo¶ć paczek: ");
scanf("%d", &pack_num);
if ( pack_num == 0) break;
printf("Podaj wielko¶ć paczki: ");
scanf("%d", &pack_size);
if ( pack_size == 0 ) break;

char *pack=(char *) malloc(pack_size);

for ( int pack_id=1; pack_id<=pack_num; pack_id++)
{
printf("Paczka #%d, wczytuje: ", pack_id);
//jesli nie moze odczytac calej paczki odczytuje j± na raty
int read_bytes=0;
do
{
int num_bytes=read(fileid, pack+read_bytes, pack_size-read_bytes);
//gdy write zglosi blad
if ( num_bytes < 1 ) { free( pack );printf("koniec\\n");return -1;};
read_bytes+=num_bytes;
printf("%d ", num_bytes);
fflush(stdout);
}while ( read_bytes < pack_size );
printf("Wczytano\\n");
if ( pack_size <= 40 ) printf("%s\\n",pack);
}
free(pack);
pack=0;

}
close(fileid);
printf("Żegnam\\n");
return 0;
}


PS: Jest to dla mnie bardzo ważne(potrzebne mi to jest na jutro), więc prosiłbym o jak najszybszą odpowiedź.

Z góry dziękuję za udzieloną pomoc

Pozdrawiam

Edit (ChmOOreck): wstawienie tagów BBCode

mikolajS.

  • Gość
Pomoc w znalezieniu błędu w kodach plików ( +wyjaśnienie kodu )
« Odpowiedź #1 dnia: 2008-06-12, 10:53:54 »
Trochę za późno na naukę C przed samą sesją. Pokaż jakie błędy daje kompilacja. Poza tym jeżeli oba pliki chcesz kompilować jako jeden program to nie może być funkcji main w obydwu! To mi wygląda na dwa zupełnie oddzielne programy, skompiluj je oddzielnie.

chmooreck

  • Gość
Pomoc w znalezieniu błędu w kodach plików ( +wyjaśnienie kodu )
« Odpowiedź #2 dnia: 2008-06-12, 10:55:04 »
Nie odrabiamy pracy domowej za kogoś...

P.S. Proszę o stosowanie tagów BBCode dla poprawy przejrzystości.

arctgx

  • Gość
Pomoc w znalezieniu błędu w kodach plików ( +wyjaśnienie kodu )
« Odpowiedź #3 dnia: 2008-06-12, 14:03:22 »
Chciałem wywalić "=c", które robiło encje w miejscu tabulacji. To jednak przywróciło traktowanie i-tego elementu tablicy jako znacznika, od którego zaczyna się kursywa ;)

ZipoKing, kolejne zadanie dla Ciebie...

Offline ultr

  • Users
  • Guru
  • *****
  • Wiadomości: 1177
    • Zobacz profil
Pomoc w znalezieniu błędu w kodach plików ( +wyjaśnienie kodu )
« Odpowiedź #4 dnia: 2008-06-12, 14:49:46 »
> rozszyfrowaniu treści poniższych plików programowych
> (dopisanie komentarzy z wyjaśnieniem jak co działa)
> oraz znalezienie błędu ponieważ nie chcą się uruchomić
> programy wynikowe.

Chyba jakiś żart.

Proponuję nie do /dev/null, ale właśnie do działu Humor :)

To już jest dno dna. Nie dość, że znalazł jakieś gotowce, to jeszcze nie potrafi ich skompilować i zrozumieć.

@inteligencik
Powodzenia za rok z Systemami Operacyjnymi I. Akurat jest to jeden z niewielu przedmiotów, których warto się uczyć nie tylko dla zaliczenia. A ty widzę go olewasz.
Rozumiem, że chcesz być specem od "systemów operacyjnych, pod warunkiem że mowa o windows", ale to chyba nie to forum.

arctgx

  • Gość
Pomoc w znalezieniu błędu w kodach plików ( +wyjaśnienie kodu )
« Odpowiedź #5 dnia: 2008-06-12, 17:51:42 »
Nie ma problemu. Dopiero teraz przeczytałem pytanie, wcześniej skupiając się tylko na technikaliach z przedstawianiem.

Na pewno bogato obkomentujemy kod, by autor mógł się pochwalić znajomością języka.

Z drugiej strony pomyślałem sobie czy autor zauważyłby, gdyby ktoś z nas podsunął mu kod kompilujący się bez problemu, ale działający inaczej niż trzeba i opatrzony bzdurnymi (niekoniecznie na pierwszy rzut oka) komentarzami ;)

P.S. Sorki, dałem go w naturalne miejsce, a może by go warto zostawić ;)

P.S.2. Przeniosłem go w Humor, choć w tytule zostało że wątek trafił w kubeł...

Offline ultr

  • Users
  • Guru
  • *****
  • Wiadomości: 1177
    • Zobacz profil
Pomoc w znalezieniu błędu w kodach plików ( +wyjaśnienie kodu )
« Odpowiedź #6 dnia: 2008-06-12, 18:34:54 »
Autor nawet nie przejrzał tego gotowca. Zadanie składa się z 2 osobnych programów. Z resztą tak jest w treści zadania, której widać również nie przeczytał.