是否有API调用为Linux禁用网络
Is there an API call to disable the network for Linux?
我在运行Red Had Enterprise Linux的实时系统上维护代码。我担心有时,尽管以最高优先级运行,但网络还是会使计算机速度减慢,我想禁用卡,这样我就可以使用CPU的全部功率。在我的功能开始时,我需要一些来自网络的文件,但在某一点之后,我可以有效地禁用网络,直到程序完成。有没有办法通过某种API调用禁用网络?
希望有人能对此进行扩展,但研究ifconfig如何禁用网络设备可能是值得的。你可能可以在接口上做一个ioctl来禁用它。根据驱动程序/nic的不同,内核可能会导致网络硬件丢弃数据包,而不是cpu。
ifconfig的源代码如下:
http://net-tools.git.sourceforge.net/git/gitweb.cgi?p=net-工具/网络工具;a=斑点;f=ifconfig.c;h=be6999578bd81e91e90e26a35fad91f4928f4226;hb=头
Iproute2也可以做与ifconfig相同的事情,如下所述:
http://git.kernel.org/?p=linux/kernel/git/shemminger/iproute2.git;a=斑点;f=ip/学科.c;h=6b051b65faab72ea46534ad3f71b3f6cd35c11b;hb=封头#l589
我发现iproute2的源代码比ifconfig更容易理解,但应该更容易看到它们如何与网络堆栈接口以禁用接口。
系统执行此操作的方式是发出ip link set dev ${DEVICE} down 2> null
。看看ip.c的代码,例如,在这里你可以自己检查它是如何完成的。关键是netif.h,它通过调用net_if_set_down()
来关闭网络。我认为这只是树立了一面旗帜。
netif->flags &= ~NETIF_FLAG_UP
你可以自己从这里继续,但请记住netif.h是内核的一部分。。。
网络是内核的一部分,而不是用户空间进程。您可以执行相当于调用rmmod
从内核中删除网络驱动程序模块的操作,假设您启用了模块支持;或者您可以将所有的netfilter规则设置为DROP
,看看这是否会加快速度。我可能更喜欢在启动器脚本中(使用现成的iptables-save
/iptables-restore
)这样做,而不是用C++进行编码。或者,您甚至可以直接关闭接口。
您说了"API",但没有提到程序/脚本的语言,也没有提到操作系统。
在Linux变体上,如CentOS、RHEL、SuSE和Fedora,来自bash/Bourne shell脚本:
/sbin/service network stop
rc=$?
if [ "$rc" -ne 0 ]; then
echo "***** Failed to stop networking service"
exit $rc
fi
# Do your thing
/sbin/service network start
- 我的神经网络不起作用 [XOR 问题]
- 在C++/Linux中设置单调时钟的一些技巧
- Linux的Cpp上的计时器
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 在C++中获取 Linux 网络统计信息
- 静态 opencv 在 Arm Linux busybox 上找不到 USB 网络摄像头
- Linux C++:访问网络统计信息
- 获取网络上活动IP的列表(Linux)
- 使用 c++ 在 Linux 中挂载网络驱动器
- 在Windows中C++开发一个P2P网络项目,该项目应该在Linux中工作
- 如何在 Linux 的 cpp 中查找侦听 0.0.0.0 的服务器的网络接口
- Protobuf网络串行化/反序列化c#与Linux c++
- 是否有API调用为Linux禁用网络
- 在linux上用C/C++编程网络摄像头的平移/倾斜/缩放功能
- 无法从外部本地网络连接到 C++ Linux 套接字程序
- 从linux网络摄像头读取使用OpenCV
- OpenCV:在Linux进程之间共享网络摄像头是可能的吗?
- 如何在linux中找到默认的网络接口
- 使用c++ TCP客户端套接字在特定的网络接口Linux/Unix
- USB网络摄像头图像捕获在没有openCV(LINUX)的C++中