lszk Napisano Kwiecień 6, 2006 Zgłoszenie Share Napisano Kwiecień 6, 2006 Znazlałem taki kod. Kompiluje się bez problemu, ale niech mi ktoś powie, dlaczego wypluwa jak w temacie? Jak (czym) możnaby to sprawdzić? Ew. jak kod poprawić, aby się to nie pokazywało. #include <stdlib.h> #include <stdio.h> #include <netinet/in.h> #include <netdb.h> #include <sys/socket.h> #include <unistd.h> #include <string.h> void get_home_page (int socket_fd) { char buffer[10000]; ssize_t number_characters_read; sprintf (buffer, "GET /\n"); write(socket_fd, buffer, strlen(buffer)); while(1){ number_characters_read = read(socket_fd, buffer, 10000); if (number_characters_read == 0) return; fwrite(buffer, sizeof(char), number_characters_read, stdout); } } int main(int argc, char *argv[]) { int socket_fd; struct sockaddr_in name; struct hostent* hostinfo; socket_fd = socket(PF_INET, SOCK_STREAM, 0); name.sin_family = AF_INET; hostinfo = gethostbyname (argv[1]); if (hostinfo = NULL) return 1; else name.sin_addr = *((struct in_addr *) hostinfo->h_addr); name.sin_port = htons(80); if (connect (socket_fd, (sockaddr *)&name, sizeof (struct sockaddr_in)) == -1) { perror ("connect"); return 1; } get_home_page(socket_fd); return 0; } Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
gwiazdor_online Napisano Kwiecień 6, 2006 Zgłoszenie Share Napisano Kwiecień 6, 2006 $ cc lszk.c -o lszk lszk.c: In function `main': lszk.c:41: error: `sockaddr' undeclared (first use in this function) lszk.c:41: error: (Each undeclared identifier is reported only once lszk.c:41: error: for each function it appears in.) lszk.c:41: error: syntax error before ')' token No ja nie wiem czy tak bez problemu się kompiluje Zaraz nad tym popracuję. Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
lszk Napisano Kwiecień 6, 2006 Autor Zgłoszenie Share Napisano Kwiecień 6, 2006 Mi się kompiluje bez takich problemów. Tylko nie działa. Gdb wypluwa Program received signal SIGSEGV, Segmentation fault. 0x00000000004008c3 in main () Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
gwiazdor_online Napisano Kwiecień 6, 2006 Zgłoszenie Share Napisano Kwiecień 6, 2006 Wlinijce 36 wpisz if (hostinfo == NULL) zamiast if (hostinfo = NULL) U mnie pomogło. Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
lszk Napisano Kwiecień 6, 2006 Autor Zgłoszenie Share Napisano Kwiecień 6, 2006 Pomogło, to znaczy program się skompilował i nie pluje już żadnymi błędami? Bo ja mam tak, jak miałem. Nawet z tą zmianą. [edit] Powyższy wypis z gdb był z linuksa na amd64. Z wersji 32-bitowej wygląda to troche inaczej, ale i tak nie działa warning: Lowest section in system-supplied DSO at 0xffffe000 is .hash at ffffe0b4 Program exited with code 01. Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
gwiazdor_online Napisano Kwiecień 6, 2006 Zgłoszenie Share Napisano Kwiecień 6, 2006 Tzn do skompilowania musiałem jeszcze w 41 linijce dopisać struct przed sockaddr. Po tych dwóch kosmetycznych zmianach sie skompilowało i uruchomiło bez błędów. /edit No dodam jeszcze, że kompilowałem pod Slackwarem 10.2 (gcc 3.3.6). Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
ecik__ Napisano Kwiecień 6, 2006 Zgłoszenie Share Napisano Kwiecień 6, 2006 U mnie program, jeśli się odpalał z jakimś parametrem, szedł bez problemu. Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
gwiazdor_online Napisano Kwiecień 6, 2006 Zgłoszenie Share Napisano Kwiecień 6, 2006 No naturalnie jak się dopisze parametr do strony to działa bez zarzutu. Jak się nie dopisze dostajemy segfolta /edit Proponuję ten fragment hostinfo = gethostbyname (argv[1]); printf("doszedl\n"); if (hostinfo == NULL) return 1; else zapisać w ten sposób if (argc < 2) { printf("Podaj nazwe strony, idioto!\n"); exit(1); } hostinfo = gethostbyname (argv[1]); Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
lszk Napisano Kwiecień 6, 2006 Autor Zgłoszenie Share Napisano Kwiecień 6, 2006 Kurka rzeczywiście go odpalałem bez parametru :/ Nice. Dzięki, teraz działa jak ma :/ Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się