gpt4 book ai didi

c - 如何判断eth0模式是static还是dhcp?

转载 作者:IT王子 更新时间:2023-10-29 01:08:47 26 4
gpt4 key购买 nike

我想用C程序来获取网络接口(interface)的ip是手动设置的还是通过dhcp设置的。

我试过使用下面的代码,它在 Debian 中有效,但在 OpenWrt 中无效。我想知道如何在 OpenWrt 中编写一个 C 程序来执行此操作。我试过使用这个:

#include <stdio.h>
int main(void)
{
FILE *fp;
char buffer[80];
fp=popen("cat /etc/network/interfaces |grep ^iface\\ br-lan | awk -F ' ' '{print $4}'","r");
fgets(buffer, sizeof(buffer), fp);
printf("%s", buffer);
pclose(fp);
}

这段代码在 Debian 中可以运行,但在 OpenWrt 中不能正常运行,所以我想知道如何编写一个程序来获得相同的结果。

最佳答案

对于OpenWRT,您可以使用以下命令获取此类信息:

$uci get network.lan.proto

所以我采用了你在问题中提出的程序,我只更改了用于获取信息的命令:

#include <stdio.h> <br>
int main(void)
{
FILE *fp;
char buffer[80];
fp=popen("uci get network.lan.proto","r");
fgets(buffer, sizeof(buffer), fp);
printf("%s", buffer);
pclose(fp);
}

要查看 OpenWRT 中可用的所有网络接口(interface),您可以使用以下命令:

$uci show network

您可以通过使用libuci 来避免在您的c 中使用调用linux 命令。 libuci 包含 C 函数来执行 uci 命令而不通过 popen 传递(popen 用于从 shell 执行外部命令)。

libuci默认存在于OpenWRT的开发环境中,无需下载,无需构建,无需安装到您的OpenWRT机器上

你可以这样使用libuci

#include <uci.h>
void main()
{
char path[]="network.lan.proto";
char buffer[80];
struct uci_ptr ptr;
struct uci_context *c = uci_alloc_context();

if(!c) return;

if ((uci_lookup_ptr(c, &ptr, path, true) != UCI_OK) ||
(ptr.o==NULL || ptr.o->v.string==NULL)) {
uci_free_context(c);
return;
}

if(ptr.flags & UCI_LOOKUP_COMPLETE)
strcpy(buffer, ptr.o->v.string);

uci_free_context(c);

printf("%s\n", buffer);
}

(未测试)

当你编译你的程序时,你必须在编译命令gcc中添加-luci

关于c - 如何判断eth0模式是static还是dhcp?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16085222/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com