C语言 倒计时程序

#include 
#include 

int main()
{
	printf("remain time :\n");
	
	int a=15;
	while(--a>=0)
	{
		printf("%5d\r",a);
		fflush(stdout);
		sleep(1);
	}	
}
#include
#include
#include
#include
#include
#include

#define MAXLEN 1024
#define SERV_PORT 8000
#define MAX_OPEN_FD 1024

int main(int argc,char *argv[])
{
    int connfd = 0;
    char buffer[MAXLEN]={0};
    struct sockaddr_in cliaddr;
    socklen_t clilen = sizeof(cliaddr);

    int listenfd = socket(AF_INET,SOCK_STREAM,0);

    struct sockaddr_in servaddr;
    servaddr.sin_family = AF_INET;
    servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
    servaddr.sin_port = htons(SERV_PORT);
    
	bind(listenfd,(struct sockaddr*)&servaddr,sizeof(servaddr));
    
	listen(listenfd,20);
	
    int epollfd = epoll_create(MAX_OPEN_FD);
	
    struct epoll_event  stevent, events[MAX_OPEN_FD];
	stevent.events = EPOLLIN;
	stevent.data.fd = listenfd;

    int ret = epoll_ctl(epollfd,EPOLL_CTL_ADD,listenfd,&stevent);

    for (;;)
    {
        size_t nready = epoll_wait(epollfd,events,MAX_OPEN_FD,-1);
		if (-1 == nready) 
		{
			perror("epoll_pwait error ");
			exit(EXIT_FAILURE);
		}
		
        for (int i = 0; i < nready; ++i)
        {
            if (events[i].data.fd == listenfd )
            {
                connfd = accept(listenfd,(struct sockaddr*)&cliaddr,&clilen);
				if (-1 == connfd) 
				{
				   perror("accept error");
				   exit(EXIT_FAILURE);
			    }
				
                stevent.data.fd = connfd;				
                stevent.events = EPOLLIN | EPOLLET;
                epoll_ctl(epollfd,EPOLL_CTL_ADD,connfd,&stevent);
            }
			else if(events[i].events & EPOLLIN)
			{
                int cli_fd = events[i].data.fd;
                int nread = read(cli_fd, buffer, sizeof(buffer));
				if (nread ==0)
				{
					epoll_ctl(epollfd,EPOLL_CTL_DEL,cli_fd,NULL);
					close(cli_fd);
				}
				else if (nread <0)
				{
					perror("accept error");
					return -1;
				}
				
				stevent.data.fd = cli_fd;
                stevent.events = EPOLLOUT | EPOLLET;
                epoll_ctl(epollfd, EPOLL_CTL_MOD, cli_fd, &stevent);
			}
			else if(events[i].events & EPOLLOUT)
			{
                int cli_fd = events[i].data.fd;
                write(cli_fd, buffer, sizeof(buffer));
				
				stevent.data.fd = cli_fd;
                stevent.events = EPOLLIN | EPOLLET;
                epoll_ctl(epollfd, EPOLL_CTL_MOD, cli_fd, &stevent);	
			}
            else 
            {

            }
        }
    }
	
    return 0;
}
#include
#include
#include 
#include
#include
#include 
#include 
 
int num =0;

int main(int argc, char* argv[]){
        int sock;
        int i = 0;
		
		if(argc != 2)
		{
			printf("param error\n");
		}
		
		time_t t1 = time(NULL);
			
        while(1)
		{	
			sock = socket(AF_INET,SOCK_STREAM,0);
			if(-1 == sock)
			{
				perror("socket create error");
				break;
			}

			struct sockaddr_in servaddr;
			memset(&servaddr,0,sizeof(servaddr));
			servaddr.sin_family = AF_INET;
			servaddr.sin_port = htons(atoi(argv[2]));
			servaddr.sin_addr.s_addr = inet_addr(argv[1]);

			if(connect(sock,(struct sockaddr*)&servaddr,sizeof(servaddr))<0)
			{
				perror("connect error");
				break;
			}
			struct sockaddr_in cliaddr;
			socklen_t addrlen;
			getsockname(sock,(struct sockaddr*)&cliaddr,&addrlen);
			printf("ip = %s ,port = %d\n",inet_ntoa(cliaddr.sin_addr),ntohs(cliaddr.sin_port));
			
			++num;
		}
		
		time_t t2 = time(NULL);

		printf("num=%d, time=%d\n, su=%f",++num, t2-t1, (float)num/t2-t1);

	close(sock);
	
	while(true)
		sleep(5);
	
	return 0;
}

只是实现了简单的倒计时,可以拓展为其他类型的屏幕刷新程序。

原理:转义字符 \r,fflush刷新缓存

 

你可能感兴趣的:(C++基础,Linux,C语言,倒计时程序,简单)