如何使用C语言的文件IO:FILE, fopen, fprintf, fclose

Example

void dispatcher_handler(u_char* state, const struct pcap_pkthdr* header, const u_char* pkt_data)
{
    struct timeval* old_ts = (struct timeval*)state;
    u_int delay;
    LARGE_INTEGER Bps, Pps;
    struct tm ltime;
    char timestr[16];
    time_t local_tv_sec;

    /* 以毫秒计算上一次采样的延迟时间 */
    /* 这个值通过采样到的时间戳获得 */
    delay = (header->ts.tv_sec - old_ts->tv_sec) * 1000000 - old_ts->tv_usec + header->ts.tv_usec;
    /* 获取每秒的比特数b/s */
    Bps.QuadPart = (((*(LONGLONG*)(pkt_data + 8)) * 8 * 1000000) / (delay));
    /*                                            ^      ^
                                                  |      |
                                                  |      |
                                                  |      |
                              将字节转换成比特 --   |
                                                         |
                                       延时是以毫秒表示的 --
    */

    /* 得到每秒的数据包数量 */
    Pps.QuadPart = (((*(LONGLONG*)(pkt_data)) * 1000000) / (delay));

    /* 将时间戳转化为可识别的格式 */
    local_tv_sec = header->ts.tv_sec;
    localtime_s(&ltime, &local_tv_sec);
    strftime(timestr, sizeof timestr, "%H:%M:%S", &ltime);

    /* 打印时间戳*/
    printf("%s ", timestr);

    /* 打印采样结果 */
    printf("BPS=%I64u ", Bps.QuadPart);
    printf("PPS=%I64u\n", Pps.QuadPart);

    FILE* fptr = fopen("trafficlog.txt", "a+");
    if (fptr == NULL) {
        printf("Cannot open traffic log file\n");
        exit(1);
    }
    fprintf(fptr, "Timestamp: %s\n", timestr);
    fprintf(fptr, "BPS=%I64u ", Bps.QuadPart);
    fprintf(fptr, "PPS=%I64u\n", Pps.QuadPart);
    
    fclose(fptr);

    //存储当前的时间戳
    old_ts->tv_sec = header->ts.tv_sec;
    old_ts->tv_usec = header->ts.tv_usec;
}

编译过程中会提示fopen函数unsafe:fopen deprecated warning
解决方式:
在include头文件之前define “_CRT_SECURE_NO_DEPRECATE”

#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>

或者:
修改项目文件预处理定义. To do this, add _CRT_SECURE_NO_DEPRECATE to Project

Properties -> Configuration Properties -> C/C++ -> Preprocessor -> Preprocessor Definitions.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值