我正在启动pppd,在我的程序中使用popen来使获取IP地址和接口名称更容易一些。我的代码独立运行良好,是一个非常典型的实现。当它在整个程序中运行时(太大以至于无法发布),问题就开始了.循环似乎在fget()行挂了很长一段时间。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的使用不是一个问题,系统和程序的其他部分仍然是响应和运行的预期。
有什么可能导致这种减速的原因吗?
发布于 2012-08-12 21:14:17
确保您的命令为空终止字符串
#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){https://stackoverflow.com/questions/11925646
复制相似问题