Inufelipe Postado Janeiro 18, 2008 Denunciar Share Postado Janeiro 18, 2008 Ola Galera do Script Brasil!!!Eu tenho este codigo:/* ** server.c -- a stream socket server demo */ #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <errno.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <sys/wait.h> #include <signal.h> #define MYPORT 2833 // the port users will be connecting to #define BACKLOG 10 // how many pending connections queue will hold void sigchld_handler(int s) { while(waitpid(-1, NULL, WNOHANG) > 0); } void n2d(char *str){ int i = 0; while(str[i] != ''){ if(str[i] == ' '){ str[i] = '$'; } i++; } } int main(void) { int sockfd, new_fd; // listen on sock_fd, new connection on new_fd struct sockaddr_in my_addr; // my address information struct sockaddr_in their_addr; // connector's address information socklen_t sin_size; struct sigaction sa; int yes=1; if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { perror("socket"); exit(1); } if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int)) == -1) { perror("setsockopt"); exit(1); } my_addr.sin_family = AF_INET; // host byte order my_addr.sin_port = htons(MYPORT); // short, network byte order my_addr.sin_addr.s_addr = INADDR_ANY; // automatically fill with my IP memset(my_addr.sin_zero, '', sizeof my_addr.sin_zero); if (bind(sockfd, (struct sockaddr *)&my_addr, sizeof my_addr) == -1) { perror("bind"); exit(1); } if (listen(sockfd, BACKLOG) == -1) { perror("listen"); exit(1); } sa.sa_handler = sigchld_handler; // reap all dead processes sigemptyset(&sa.sa_mask); sa.sa_flags = SA_RESTART; if (sigaction(SIGCHLD, &sa, NULL) == -1) { perror("sigaction"); exit(1); } FILE *file; char index[80]; file = fopen("index.nin","r"); fscanf(file,"%[A-Z][[:space:]][a-z][0-9]",&index); printf("%s\n",index); n2d((char*)&index); printf("%s\n",index); while(1) { // main accept() loop sin_size = sizeof their_addr; if ((new_fd = accept(sockfd, (struct sockaddr *)&their_addr, \ &sin_size)) == -1) { perror("accept"); continue; } printf("server: got connection from %s\n", \ inet_ntoa(their_addr.sin_addr)); if (!fork()) { // this is the child process close(sockfd); // child doesn't need the listener if (send(new_fd, index, 80, 0) == -1) perror("send"); close(new_fd); exit(0); } close(new_fd); // parent doesn't need this } return 0; } e este arquivo: SHOW "well.png"O problema quandoele lê o arquivoele para antes do espaço.Se alguém souber o problema...FALOU Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest Kassi Postado Janeiro 18, 2008 Denunciar Share Postado Janeiro 18, 2008 Será que esse fscanf resolve seu problema?char index[20]; fscanf(fp, "%[^\n]", index); Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Inufelipe Postado Janeiro 20, 2008 Autor Denunciar Share Postado Janeiro 20, 2008 Cara, muito obrigado!!!Porém como esperadoquando eu ponhomais de uma linha no arquivo quedesejo ler, ele lê apenasuma linha.Não há um jeitode fazer algo como:fscanf(fp,"%[EOF]",&index);onde EOF é end of file, que é ummarcador que há no final doarquivo.OBRIGADO Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Inufelipe Postado Janeiro 20, 2008 Autor Denunciar Share Postado Janeiro 20, 2008 Consegui assim:fscanf(file,"%[\t\r\n \x21-\x7E]",&index); Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Inufelipe
Ola Galera do Script Brasil!!!
Eu tenho este codigo:
e este arquivo:O problema quando
ele lê o arquivo
ele para antes do espaço.
Se alguém souber o problema...
FALOU
Link para o comentário
Compartilhar em outros sites
3 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.