首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pppd popen挂在C中

pppd popen挂在C中
EN

Stack Overflow用户
提问于 2012-08-12 20:30:18
回答 1查看 1.4K关注 0票数 1

我正在启动pppd,在我的程序中使用popen来使获取IP地址和接口名称更容易一些。我的代码独立运行良好,是一个非常典型的实现。当它在整个程序中运行时(太大以至于无法发布),问题就开始了.循环似乎在fget()行挂了很长一段时间。popen在自己的线程中启动,然后根据输出进行管理。

popen/pppd代码基本上如下所示。

代码语言:javascript
复制
int main(void){
    pthread_create(&thread, NULL, pppd, (char *)NULL);
    pthread_join(thread, NULL);

    return 0;
}

void *pppd(char *args){
    char* command = malloc(32);

    sprintf(command, "pppd %s call %s", dev, provider);
    pppd_stream = popen(command, "r");

    if(pppd_stream == NULL){
        pppd_terminated = TRUE;
        return;
    }

    free(command);

    while(fgets(buffer, 128, d->pppd_stream) != NULL){

        //handle_output
    }

}

CPU的使用不是一个问题,系统和程序的其他部分仍然是响应和运行的预期。

有什么可能导致这种减速的原因吗?

EN

回答 1

Stack Overflow用户

发布于 2012-08-12 21:14:17

确保您的命令为空终止字符串

代码语言:javascript
复制
#define COMMAND_BUFFER_SIZE    256   /* Modify this if you need */

snprintf(command, COMMAND_BUFFER_SIZE, "pppd %s call %s", dev, provider);
command[COMMAND_BUFFER_SIZE - 1] = '\0';
pppd_stream = popen(command, "r");

编辑:

检查您的fgets

代码语言:javascript
复制
while(fgets(buffer, 128, d->pppd_stream) != NULL){

你可能想要这个:

代码语言:javascript
复制
while(fgets(buffer, 128, pppd_stream) != NULL){
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11925646

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档