如何使用C程序进入网络命名空间并读取文件内容

时间:2018-06-07 03:40:58

标签: c linux linux-namespaces

在我的Linux机器上,我配置了网络命名空间。使用shell脚本或命令行或系统命令,我能够获取网络命名空间中存在的文件内容。

ip netns exec test_namespace cat /var/test_namespace/route.conf

输出:

cardIP=10.12.13.1

在C程序中,我可以使用system("ip netns exec test_namespace cat /var/test_namespace/route.conf")命令来获取输出。但我不想使用这个选项。

寻找替代方法,我不确定系统调用setns,如何使用它。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

如果您对system感到厌倦,可以使用popen将脚本输出作为文件读取:

示例

/* the command to execute */
FILE *f = popen("ls", "r");

/* Here, we should test that f is not NULL */
printf("result of `ls`:\n");

/* read process result */
char buffer[256];
while (fgets(buffer, sizeof buffer, f)  
{
    puts(buffer);
}

/* and close the process */
pclose(f);