#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刷新缓存