- 论坛徽章:
- 0
|
原帖由 zsniper 于 2006-10-12 21:48 发表
我想信号好像比较难实现,应该用select监听标准输入!
楼上是说这样吗?可是我试了一下,不行呀,是不是有什么不对的地方?
#include <unistd.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/time.h>
#include <stdio.h>
int main()
{
fd_set fd_read_set, fd_write_set;
int max_fd = 0;
struct timeval timeout;
int ret = -1;
char buf[1024] = {0, };
unsigned long now_time = 0, start_time = 0;
int n = 0;
FILE *fp = NULL;
fp = fopen("/neteye/var/tmp/jianpan.txt", "w");
if(fp == NULL){
return -1;
}
while(1){
FD_ZERO(&fd_read_set);
FD_ZERO(&fd_write_set);
timeout.tv_sec = 60 * 3;
timeout.tv_usec = 0;
max_fd = 0;
max_fd = STDIN_FILENO;
start_time = (unsigned long)time(NULL);
select_next:
ret = select(max_fd + 1, &fd_read_set, 0, 0, &timeout);
if (0 > ret){
if((errno == EINTR) || (errno == EWOULDBLOCK)) {
now_time = (unsigned long)time(NULL);
if((now_time - start_time) > 3 * 60){
return ret;
}
goto select_next;
}
return ret;
}
if(FD_ISSET(STDIN_FILENO, &fd_read_set)){
fprintf(fp, "%s\n", "select STDIN_FILENO");
if((n = read(STDIN_FILENO, buf, 1024)) > 0){
if(fprintf(fp, "%s\n", buf) == -1){
write(STDOUT_FILENO, "write error\n", 12);
}else{
write(STDOUT_FILENO, "read error\n", 11);
goto select_next;
}
}
}
}
fclose(fp);
return 0;
}
谢谢!! |
|