gpt4 book ai didi

c - pppd popen 卡在 C 中

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:38:28 25 4
gpt4 key购买 nike

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

popen/pppd 代码基本上如下。

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 使用不是问题,系统和程序的其他部分仍然响应并按预期运行。

对于可能导致这种放缓的原因有什么想法吗?

最佳答案

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

#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:

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

你可能想要这个:

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

关于c - pppd popen 卡在 C 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11925646/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com