我正在使用NMAP和C创建一个简单的网络扫描函数多种IP。
那么,有没有办法检查命令何时完成执行?我不希望我的C代码挂在系统呼叫上,而是想检查一个标志或循环中的某些内容,这些旗帜会知道Popen/nmap何时完成,以便我的C程序的其他部分不会来停顿。这有可能??
谢谢!
我可以想到2种直接的方法
-
您可以直接
fork()
,然后建立一种传达这两个过程的方法,这将非常困难,因为IPC并不容易。 -
您可以使用
pthread_create()
创建一个新线程并在那里致电popen()
,它会容易得多,并且可以使用适当的锁定机制来防止比赛条件共享线程之间的数据。
您可以使用叉(Hardmode)
使用多处理或者您可以使用pthread(easymode)
使用多线程任何一个允许您一次做2件事。多处理很难,因为您必须担心InnerProccess通信(管道),而您尝试执行的两个任务无法共享内存。
多线程更容易,因为您只需要包括库(-lpthread
),然后指定单独线程上的函数。