我的程序捕獲來自互聯網的網絡流量以分析數據包的模糊性。我正在使用winPcap庫。現在我想程序運行2分鐘&自動退出程序,無需手動關閉命令提示符控制檯。你能否提供我這樣做的代碼。 謝謝如何在執行特定時間後退出主函數C
代碼如下:
int main()
{
u_int i, res , inum ;
u_char errbuf[PCAP_ERRBUF_SIZE] , buffer[100];
u_char *pkt_data;
time_t seconds;
struct tm tbreak;
pcap_if_t *alldevs, *d;
pcap_t *fp;
struct pcap_pkthdr *header;
fopen_s(&logfile , "log.txt" , "w");
if(logfile == NULL)
{
printf("Unable to create file.");
}
/* The user didn't provide a packet source: Retrieve the local device list */
if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &alldevs, errbuf) == -1)
{
fprintf(stderr,"Error in pcap_findalldevs_ex: %s\n", errbuf);
return -1;
}
i = 0;
/* Print the list */
for(d=alldevs; d; d=d->next)
{
printf("%d. %s\n ", ++i, d->name);
if (d->description)
{
printf(" (%s)\n", d->description);
}
else
{
printf(" (No description available)\n");
}
}
if (i==0)
{
fprintf(stderr,"No interfaces found! Exiting.\n");
return -1;
}
printf("Enter the interface number you would like to sniff : ");
scanf_s("%d" , &inum);
/* Jump to the selected adapter */
for (d=alldevs, i=0; i< inum-1 ;d=d->next, i++);
/* Open the device */
if ((fp= pcap_open(d->name,
100 /*snaplen*/,
PCAP_OPENFLAG_PROMISCUOUS /*flags*/,
20 /*read timeout*/,
NULL /* remote authentication */,
errbuf)
) == NULL)
{
fprintf(stderr,"\nError opening adapter\n");
return -1;
}
//read packets in a loop :)
while((res = pcap_next_ex(fp, &header, &pkt_data)) >= 0)
{
if(res == 0)
{
// Timeout elapsed
continue;
}
seconds = header->ts.tv_sec;
localtime_s(&tbreak , &seconds);
strftime (buffer , 80 , "%d-%b-%Y %I:%M:%S %p" , &tbreak);
//print pkt timestamp and pkt len
//fprintf(logfile , "\nNext Packet : %ld:%ld (Packet Length : %ld bytes) " , header->ts.tv_sec, header->ts.tv_usec, header->len);
fprintf(logfile , "\nNext Packet : %s.%ld (Packet Length : %ld bytes) " , buffer , header->ts.tv_usec, header->len);
ProcessPacket(pkt_data , header->caplen);
}
if(res == -1)
{
fprintf(stderr, "Error reading the packets: %s\n" , pcap_geterr(fp));
return -1;
}
return 0;
}
可能重複[什麼是30ms的C中的經過時間後退出循環的最佳出路++ ](http://stackoverflow.com/questions/946167/what-is-the-best-way-to-exit-out-of-a-loop-after-an-elapsed-time-of-30ms-in- c) – 2013-03-10 20:32:29