0

我正在编写一个 C 代码来访问一个文件流并逐行打印它的内容(实际上,它是一个已被 popen()-ed 的进程的标准流)。我想出了一种 sss (简单但仍然愚蠢)的方式来访问文件:

static int this_event_handler(struct msg) {

...


    pFile = popen ("some command");
    while ( fgets (mystring , 100 , pFile) != NULL ) {
        puts (mystring);
    }

...

}

我知道这段代码会阻塞事件循环,以后发送给服务器的消息将没有用。那么,有没有一种在不阻塞事件循环的情况下处理这个问题的好方法呢?

例如,我正在寻找一种方法,它可以像事件驱动一样侦听流,并在写入/读取新行时发出事件(不创建新线程)。

4

1 回答 1

0

您可以创建一个新线程来读取不会阻塞事件循环的文件内容。这是线程启动函数:

void* put_msg(void* arg) {
    File *pFile = (File*)arg;
    mystring[100];
    while ( fgets (mystring , 100 , pFile) != NULL ) {
        puts (mystring);
    }
    return NULL;
}

在您的事件处理程序中调用它,就在打开 pFile 之后:

pthread_t pid;
pthread_create(&pid, NULL, &put_msg, (void*)pFile);
于 2013-05-28T12:45:09.587 回答