guarda el estado del progreso en una variables.... y cada x tiempo, haz un borrón de la pantalla y pon el estado actual.
Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.
Mostrar Mensajes Menú
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <fcntl.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <sys/time.h>
#define PUERTO 12345
int main()
{
int sockfd,newcon;
struct sockaddr_in cliaddr,seraddr;
struct timeval intervalo;
fd_set fds;
int cliaddrsize;
int recsize;
char recibo[100];
char escribo[100];
intervalo.tv_sec=0; intervalo.tv_usec=100;
bzero(&seraddr,sizeof(struct sockaddr_in));
bzero(&cliaddr,sizeof(struct sockaddr_in));
seraddr.sin_family=AF_INET;
seraddr.sin_port=htons(PUERTO);
seraddr.sin_addr.s_addr=INADDR_ANY;
sockfd=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(bind(sockfd,(struct sockaddr *) &seraddr,sizeof(struct sockaddr)) | listen(sockfd,20)) { printf("Error bindeando\n"); exit(-1); }
fcntl(sockfd,F_SETFL,O_NONBLOCK);
while(1)
{
newcon=accept(sockfd,(struct sockaddr *) &cliaddr, &cliaddrsize);
if(newcon!=-1)
{
printf("Tenemos a este pedazo de cabron conectado a nuestro sistema: \n ip: %s\npuerto: %hu\n",inet_ntoa(cliaddr.sin_addr),ntohs(cliaddr.sin_port));
if(fork()==0)
{
while(1)
{
FD_ZERO(&fds);
FD_SET(newcon,&fds);
FD_SET(0,&fds);
select(newcon+1,&fds,NULL,NULL,&intervalo);
if(FD_ISSET(newcon,&fds))
{ while((recsize=recv(newcon,recibo,100,0))>0) fwrite(recibo,sizeof(char),recsize,stdout); }
if(FD_ISSET(0,&fds)) { scanf("%[^\n]s",escribo); send(newcon,escribo,strlen(escribo),0); }
}
}
}
}
return 0;
}
while(1)
{
FD_ZERO(&fds);
FD_SET(newcon,&fds);
FD_SET(STDIN_FILENO,&fds);
select(newcon+1,&fds,NULL,NULL,&intervalo);
if(FD_ISSET(newcon,&fds))
{
while(((sizerec=recv(newcon,buffer,BUFFERSIZE,0))>0)
fwrite(buffer,sizeof(char),sizerec,stdout);
}
if(FD_ISSET(STDIN_FILENO,&fds))
{
scanf("%[^\n]s",envbuffer); // asumimos un buffer muy grande
send(newcon,envbuffer,strlen(envbuffer),0);
}
}