c tool系列------c语言编程常用语句

针对main函数的argc,argv


for (i = 1; i < argc ;) {
        if (0 == strcmp(argv[i], "-m") && (argc - i > 1)) {
            tty_modem = argv[i + 1];
            i += 2;
        } else if (0 == strcmp(argv[i], "-p") && (argc - i > 1)) {
            tty_pc = argv[i + 1];
            i += 2;
        } else if (0 == strcmp(argv[i], "-d") && (argc - i > 1)) {
            i += 2;
        } else if (0 == strcmp(argv[i], "-f") && (argc - i > 1)) {
            modem_config_file = argv[i + 1];
            i += 2;
        } else if (0 == strcmp(argv[i], "-t") && (argc - i > 1)) {
            tunnel_switch = argv[i + 1];
            if (0 == strncmp(tunnel_switch, "on", 2)) {
                tunnel_mode = 1;
            }
            i += 2;
        }
    }

使用poll函数

#define AT_CMD_OK 0
#define AT_CMD_REOPEN 1
#define AT_CMD_RESEND 2



 result = wait_for_data (fd, 3000 );
        if (result == AT_CMD_OK ) {
            if (read(fd, buf, buf_size-1) < 0) {
                LOGE(TAG"Read response from %s error, error num is %d\n", tty_name, errno);
                return -1;
            }
        } else if (result == AT_CMD_RESEND) {
            poll_cnt++;
            LOGD(TAG"Wait %s result, poll %s failed %d times\n", at_cmd, tty_name, poll_cnt);
            sleep(2);
            if (poll_cnt >= POLL_RETRY_MAX)
                return -1;
        } else {
            LOGD(TAG"Wait %s result, poll %s failed and need reopen.\n", at_cmd, tty_name);
            modem_hangup_flag = 1;
            return -1;
        }
int wait_for_data( int fd, long wait_time_ms)
{
    struct pollfd fds[1];
    int poll_ret;
    int retVal = AT_CMD_OK;

    fds[0].fd = fd;
    fds[0].events = POLLIN;
    fds[0].revents = 0;

    poll_ret = poll( fds, 1, wait_time_ms);
    if ( 0 < poll_ret ) {
        if ( fds[0].revents & POLLHUP ) {
            LOGE(TAG"device hung up\n");
            retVal = AT_CMD_REOPEN;
            goto Exit_Handler;

        } else if ( fds[0].revents & POLLIN ) {
            LOGV(TAG"Received response data\n");

        } else {
            /* Not sure we will ever get here */
            LOGE(TAG"Unexpected event while waiting for response\n");
            retVal = AT_CMD_RESEND;
            goto Exit_Handler;
        }
    } else if ( 0 == poll_ret ) {
        LOGE(TAG"Timed out while waiting for response\n");
        retVal = AT_CMD_RESEND;
        goto Exit_Handler;

    } else {
        LOGE(TAG"Error occured polling for response.  errno: %d\n", errno);
        retVal = AT_CMD_RESEND;
        goto Exit_Handler;
    }

    retVal = AT_CMD_OK;

Exit_Handler:
    return retVal;
}



关闭文件操作

static void fdclose()
{
    if (md_fd != -1) {
        close(md_fd);
        md_fd = -1;
    }
    if (pc_fd != -1) {
        /* Add errno trace in case that "unable write usb value" problem of BZ4161 is reproduced.*/
        if (close(pc_fd) < 0) {
            LOGE("close(pc_fd:%d) failed, error: %d, %s\n", pc_fd, errno, strerror(errno));
        }
        pc_fd = -1;
    }
}



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值