open/fopen/system三种sys操作效率比较

在一些/sys设备或者文件代码设置操作中,大家可能会用到open/fopen/system三种sys操作,

在测试中需要尽快启动一个pwm信号:
int StartSecPulse(bool onesec,bool onoff)
{
    pid_t status = 0;
    int fd = 0;
    char buffer[64];
    struct timespec time1 = { 0, 0 };
    struct timespec time2 = { 0, 0 };
    struct timespec ts;
    FILE *p=NULL;

    clock_gettime(CLOCK_REALTIME, &time1);
    fd = open("/sys/devices/ocp/48300000.epwmss/48300200.ehrpwm/pwm/pwmchip0/pwm1/period",O_RDWR);
    //fprintf(p,"%d",700000000);
    write(fd,"600000000",sizeof("700000000"));
    close(fd);   
    clock_gettime(CLOCK_REALTIME, &time2);
    printf("StartSecPulse CLOCK_REALTIME:sec= %d, nsec = %d\n", time1.tv_sec, time1.tv_nsec);
    printf("StartSecPulse CLOCK_REALTIME 2:sec= %d, nsec = %d\n", time2.tv_sec, time2.tv_nsec);
#if 1
    clock_gettime(CLOCK_REALTIME, &time1);
    p = fopen("/sys/devices/ocp/48300000.epwmss/48300200.ehrpwm/pwm/pwmchip0/pwm1/period","w");
    fprintf(p,"%d",700000000);
    fclose(p);   
    clock_gettime(CLOCK_REALTIME, &time2);
    printf("StartSecPulse CLOCK_REALTIME:sec= %d, nsec = %d\n", time1.tv_sec, time1.tv_nsec);
    printf("StartSecPulse CLOCK_REALTIME 2:sec= %d, nsec = %d\n", time2.tv_sec, time2.tv_nsec);


    clock_gettime(CLOCK_REALTIME, &time1);
    sprintf(buffer, "echo 1000000000 >  /sys/devices/ocp/48300000.epwmss/48300200.ehrpwm/pwm/pwmchip0/pwm1/period");
    status = system(buffer);
    if (-1 == status && WIFEXITED(status) && (WEXITSTATUS(status) == 0)) 
        return -1;
    clock_gettime(CLOCK_REALTIME, &time2);
    printf("StartSecPulse CLOCK_REALTIME:sec= %d, nsec = %d\n", time1.tv_sec, time1.tv_nsec);
    printf("StartSecPulse CLOCK_REALTIME 2:sec= %d, nsec = %d\n", time2.tv_sec, time2.tv_nsec);
#endif
    return 0;
-----------------测试数据------------
# ./testapi_so secpulse 1

test_secpulse:
CLOCK_REALTIME:sec= 87055, nsec = 459398823
StartSecPulse CLOCK_REALTIME:sec= 87055, nsec = 459558114
StartSecPulse CLOCK_REALTIME 2:sec= 87055, nsec = 459809948
StartSecPulse CLOCK_REALTIME:sec= 87055, nsec = 459868781
StartSecPulse CLOCK_REALTIME 2:sec= 87055, nsec = 460768489
StartSecPulse CLOCK_REALTIME:sec= 87055, nsec = 460819489
StartSecPulse CLOCK_REALTIME 2:sec= 87055, nsec = 468688031

# ./testapi_so secpulse 1

test_secpulse:
CLOCK_REALTIME:sec= 87072, nsec = 674135741
StartSecPulse CLOCK_REALTIME:sec= 87072, nsec = 674294408
StartSecPulse CLOCK_REALTIME 2:sec= 87072, nsec = 674547491
StartSecPulse CLOCK_REALTIME:sec= 87072, nsec = 674604158
StartSecPulse CLOCK_REALTIME 2:sec= 87072, nsec = 675504450
StartSecPulse CLOCK_REALTIME:sec= 87072, nsec = 675559700
StartSecPulse CLOCK_REALTIME 2:sec= 87072, nsec = 683437241

# ./testapi_so secpulse 1
test_secpulse:
CLOCK_REALTIME:sec= 87240, nsec = 695442261
StartSecPulse CLOCK_REALTIME:sec= 87240, nsec = 695603803
StartSecPulse CLOCK_REALTIME 2:sec= 87240, nsec = 695852845
StartSecPulse CLOCK_REALTIME:sec= 87240, nsec = 695909636
StartSecPulse CLOCK_REALTIME 2:sec= 87240, nsec = 696797095
StartSecPulse CLOCK_REALTIME:sec= 87240, nsec = 696849886
StartSecPulse CLOCK_REALTIME 2:sec= 87240, nsec = 704839970

根据上面的log打印信息,nsec两个时间的差值,open操作的效率是最高的,fopen次之,system调用是最慢的。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值