我正在编写一个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);