使用 popen() 执行缓慢的进程
executing slow process with popen()
我正在使用 nmap 和 C 创建一个简单的网络扫描功能。我想使用 popen() 来执行 nmap,但是 nmap 需要将近 30 秒才能完成,因为我正在扫描范围广泛的 IP。
那么,有没有办法检查命令何时完成执行?我不希望我的 C 代码在系统调用时挂起,相反我只想检查一个标志或循环中的某些东西,它会知道 popen/nmap 何时完成,所以我的 C 程序的其他部分不会停下来。这可能吗??
谢谢!
您可以通过 fork(硬模式)
使用多重处理
或者你可以使用多线程pthread(easymode)
任何一个都可以让你同时做两件事。多处理很难,因为您必须担心内部进程通信(管道),并且您尝试执行的 2 个任务不能共享内存。
多线程要容易得多,因为您只需要包含库 (-lpthread
),然后指定单独线程上的函数。
我可以想到 2 种直接的方法
你可以直接fork()
然后建立一个方法让两个进程通信,这会很困难,因为IPC不是一件容易的事
您可以使用 pthread_create()
创建一个新线程并在那里调用 popen()
,这会容易得多,并且您可以通过使用适当的锁定机制在线程之间共享数据以防止竞争条件。
我正在使用 nmap 和 C 创建一个简单的网络扫描功能。我想使用 popen() 来执行 nmap,但是 nmap 需要将近 30 秒才能完成,因为我正在扫描范围广泛的 IP。
那么,有没有办法检查命令何时完成执行?我不希望我的 C 代码在系统调用时挂起,相反我只想检查一个标志或循环中的某些东西,它会知道 popen/nmap 何时完成,所以我的 C 程序的其他部分不会停下来。这可能吗??
谢谢!
您可以通过 fork(硬模式)
使用多重处理或者你可以使用多线程pthread(easymode)
任何一个都可以让你同时做两件事。多处理很难,因为您必须担心内部进程通信(管道),并且您尝试执行的 2 个任务不能共享内存。
多线程要容易得多,因为您只需要包含库 (-lpthread
),然后指定单独线程上的函数。
我可以想到 2 种直接的方法
你可以直接
fork()
然后建立一个方法让两个进程通信,这会很困难,因为IPC不是一件容易的事您可以使用
pthread_create()
创建一个新线程并在那里调用popen()
,这会容易得多,并且您可以通过使用适当的锁定机制在线程之间共享数据以防止竞争条件。