如何用C语言实现事件驱动的磁盘IO



我正在编写一个C代码来访问文件蒸汽并逐行打印它的内容(事实上,它是一个进程的std流,该进程已被popen()-ed)。我想出了一个sss(简单但愚蠢)的方法来访问文件:

static int this_event_handler(struct msg) {
...

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

我知道这段代码阻塞了事件循环,并且将来发送给服务器的消息将不会有用。那么,有没有一种好的方法来处理这个而不阻塞事件循环?

例如,我正在寻找一个方法,监听流像事件驱动,并发出一个事件每当一个新的行写入/可读(不创建一个新的线程)。

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

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);

相关内容

  • 没有找到相关文章

最新更新