当前位置: 首页 > 面试题库 >

如何确定eth0模式是static还是dhcp?

马亮
2023-03-14
问题内容

我想使用C程序来获取网络接口的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中可用的所有网络接口,可以使用以下命令:

$uci show network

您可以通过使用避免在c语言中调用linux命令libuci。的libuci含有C函数来执行不经由POPEN传递UCI命令(popen用于从外壳执行外部命令)。

默认情况下,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);
}

(未测试)

当您编译程序时,必须-luci在编译命令中html" target="_blank">添加gcc



 类似资料:
  • 问题内容: 我想针对AJAX请求与常规请求以不同的方式处理错误。 如何在Struts2操作中确定请求是否为AJAX? 问题答案: 您应该检查请求标头是否存在并且等于。 请注意,并非所有AJAX请求都具有此标头,例如,请求不发送该标头。如果您是使用(或使用任何其他新的AJAX框架)生成AJAX调用,则该文件就在那里。 您可以使用… 检查它是否存在,例如,当您对Stack Overflow投票时;)

  • 我有这样的代码 现在,为了打印值,如果T是一个类,我想调用对象的打印函数,但是如果T是一个基本数据类型,我只想使用printf。 那么,如何确定模板类型是基本数据类型还是类?

  • 问题内容: 如何确定变量is 或? 我的代码如下: 但是,如果执行此操作,JavaScript解释器将停止执行。 问题答案: 您可以使用抽象相等运算符的品质来做到这一点: 因为为true,所以上面的代码将同时捕获和。

  • 问题内容: 在Java中,有人教导说应该对变量进行私有化以实现更好的封装,但是静态常量呢?这个: 结果将等同于此: 但是哪种更好的做法? 问题答案: 有一个原因不直接在代码中使用常量。 假设FOO稍后可能会更改(但仍保持不变)。只要没有人愚蠢到直接对值进行硬编码就不会破坏任何内容吗? 否。Java编译器会将上面的Foo等常量内联到调用代码中,即变成。现在,如果您重新编译库而不是重新编译调用代码,则

  • 问题内容: 我将从服务器接收JSON对象或数组,但是我不知道它将是什么。我需要使用JSON,但是要这样做,我需要知道它是对象还是数组。 我正在使用Android。 有没有人有这样做的好方法? 问题答案: 我找到了更好的方法来确定: tokenizer可以返回更多类型:http : //developer.android.com/reference/org/json/JSONTokener.html

  • 问题内容: 当我输入时,它给出以下输出。 从中我如何知道给定的操作系统是32位还是64位? 这在编写脚本时非常有用,例如:我要为哪种体系结构构建? 问题答案: 尝试。缺少它并输出: 否则,请键入以下内容 ,而不是Linux内核,而是CPU : 要么: 在“标志”参数下,您将看到各种值:请参阅“ / proc / cpuinfo中的标志是什么意思? ”其中一个名为:(x86-64:amd64,也称为