我读过墙上的文字,Avoid Globals。这导致了一个明显的问题,如何最好地做到这一点?
我显然想用当前的项目来做。目标是让远程 PC 向已经有标准输入读取器的应用程序发送“击键”。这个想法是让现有代码检测到没有挂起的击键,然后检查是否有“udp 击键”,如果有,将其填入,使其看起来像是键盘输入。微创,不需要在其他人的代码中进行大量改装。
所以我拼凑了一个小型 UDP 套接字读取器,它使用一个setup()
函数来打开和绑定端口,然后是service()
一个循环中的函数,它使用一次非阻塞,没有循环,只需检查现在select()
是否有任何内容要读取。如果是,则从套接字读取数据并对其进行处理,否则返回 0。
// pseudo c
char c;
setup();
while (1)
{
c = check_for_keyboard_entry();
if ( c == 0 )
c = service();
handle_keypress( c );
do_a_bunch_of_other_stuff();
}
显而易见的方法是使用一些全局变量在两个函数之间传输端口、超时、sockaddr 等。但是,你应该是狂热的全球主义者,对吧?
那么在函数之间传输六个或八个变量的首选方法是什么?
如果我在 中使用静态变量,例程setup()
可以访问它们吗?service()
我想一个得到 malloc-ed 和传递的结构会起作用。我应该有一个cleanup()
关闭套接字并释放内存。
请记住,这是交流问题。没有 C++!