[C Linux] - Odczyt prostych danych z pliku txt
Ostatnio zmodyfikowano 2015-07-01 10:59
Alt123 Temat założony przez niniejszego użytkownika |
[C Linux] - Odczyt prostych danych z pliku txt » 2015-06-30 18:57:37 Czesc, pisze sobie taka mini aplikacje klient serwer w C pod Linuxem. Generalnie ma to byc "sprawdzarka cen w sklepie komputerowym". Z poziomu klienta chce podawac Kod Towaru (jakis integer) to ma byc sprawdzone przez serwer w bazie danych jako plik txt i odpowiedz z Nazwa Towaru i Cena ma byc wyslana do klienta i tam wyswietlona. Na razie program testowo dziala tak, ze zamienia litery z malych na duze. Mam problem bo nie wiem jak ogarnac to odczytywanie danych z tego pliku txt. Plik txt bedzie tworzony recznie wiec nie jest potrzebny zaden interfejs do dodawania towaru. Wystarczy tylko odczytywanie danych z tego pliku. Macie jakies pomysly? Jesli macie jakies inne prostsze pomysly jak to mozna zrealizowac to chetnie wyslucham. Kod klienta:
#include <netdb.h> #include <string.h> #include <arpa/inet.h> #include <sys/wait.h> #include <unistd.h> #include <stdio.h> #include <sys/un.h> #include <errno.h> #include <stdlib.h> #include <signal.h> #include <ctype.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h>
#define SIZE sizeof(struct sockaddr_in)
int main() { int sockfd; char c, rc; struct sockaddr_in server = { AF_INET, 7000 }; server.sin_addr.s_addr = inet_addr( "127.0.0.1" ); if(( sockfd = socket( AF_INET, SOCK_STREAM, 0 ) ) == - 1 ) { perror( "socket call failed" ); exit( 1 ); } if( connect( sockfd,( struct sockaddr * ) & server, SIZE ) == - 1 ) { perror( "connect call failed" ); exit( 1 ); } for( rc = '\n';; ) { if( rc == '\n' ) printf( "Podaj kod towaru aby otrzymac nazwe i cene:\n" ); if( c == 'q' ) { printf( "Program konczy prace...\n" ); exit( 0 ); } c = getchar(); send( sockfd, & c, 1, 0 ); if( recv( sockfd, & rc, 1, 0 ) > 0 ) printf( "%c", rc ); else { printf( "server has died.\n" ); close( sockfd ); exit( 1 ); } } }
Kod serwera:
#include <netdb.h> #include <string.h> #include <arpa/inet.h> #include <sys/wait.h> #include <unistd.h> #include <stdio.h> #include <sys/un.h> #include <errno.h> #include <stdlib.h> #include <signal.h> #include <ctype.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h>
#define SIZE sizeof(struct sockaddr_in)
void catcher( int sig ); int newsockfd;
int main() { printf( "Serwer jest gotowy aby przyjac zapytanie...\n" ); int sockfd; char c; struct sockaddr_in server = { AF_INET, 7000, INADDR_ANY }; static struct sigaction act; act.sa_handler = catcher; sigfillset( &( act.sa_mask ) ); sigaction( SIGPIPE, & act, NULL ); if(( sockfd = socket( AF_INET, SOCK_STREAM, 0 ) ) == - 1 ) { perror( "socket call failed" ); exit( 1 ); } if( bind( sockfd,( struct sockaddr * ) & server, SIZE ) == - 1 ) { perror( "bind call failed" ); exit( 1 ); } if( listen( sockfd, 5 ) == - 1 ) { perror( "listen call failed" ); exit( 1 ); } for(;; ) { if(( newsockfd = accept( sockfd, NULL, NULL ) ) == - 1 ) { perror( "accept call failed" ); continue; } if( fork() == 0 ) { while( recv( newsockfd, & c, 1, 0 ) > 0 ) { if( c == 'q' ) { printf( "Program konczy prace...\n" ); exit( 0 ); } c = toupper( c ); send( newsockfd, & c, 1, 0 ); } close( newsockfd ); exit( 0 ); } close( newsockfd ); } }
void catcher( int sig ) { close( newsockfd ); exit( 0 ); }
Plik txt ma taka postac: 1 Monitor 500zl 2 Dysk 200zl 3 Mysz 50zl Pozdrawiam! |
|
darko202 |
» 2015-07-01 08:30:38 |
|
Alt123 Temat założony przez niniejszego użytkownika |
» 2015-07-01 10:59:20 Dzieki Kolego za chec pomocy!
Przeczytam te linki od Ciebie.
Natomiast one dotycza c++ a ja pisze to w czystym c.
Kod narazie jest probny i bedzie przerobiony pod moje zadanie ale najwiekszy problem mam z importem danych z tego pliku do mojego programu. Sprawdzilem to w ksiazkach ktore mam pod reka - S. Prata - Szkola programowania i tam jest tylko prosta operacja odczytu jednego slowa albo liczenia znakow. Moze niepotrzebnie sobie utrudniam to zadanie i da sie to zrobic w jakis prostszy sposob, na przyklad jakis inny uklad informacji w tym pliku albo cos takiego.
Mimo wszystko dzieki za odpowiedz.
Gdyby ktos jeszcze chcial cos napisac to chetnie wyslucham Waszych rad.
Pozdrawiam. |
|
« 1 » |