IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Linux C程序获取本机可用IP地址 && Linux C程序获取system()函数的标准输出到char *缓冲中 -> 正文阅读

[系统运维]Linux C程序获取本机可用IP地址 && Linux C程序获取system()函数的标准输出到char *缓冲中

Linux C程序获取本机可用IP地址 &&

Linux C程序获取system()函数的标准输出到char *缓冲中

方法一:使用pipe匿名管道

思路:fork一个子进程,并创建一个匿名管道,在子进程中执行shell命令,并将其标准输出dup到匿名管道的输入端,父进程从管道 中读取,即可获得shell命令的输出。

char * get_ipaddr(){
        int fd[2];
        pipe(fd);
        int pid = fork();
        if(pid){
                char *buf = (char *)malloc(sizeof(char)*15);
                bzero(&buf, sizeof(char));
                int n = read(fd[0], buf, 15);
                strtok(buf, "\r\n");
                return buf;
        }else{
                dup2(fd[1],STDOUT_FILENO);
                close(fd[1]);
                close(fd[0]);
                system("ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d 'addr:'");
                exit(0);
        }
        return NULL;
}
// 调用完函数记得free掉,返回的结果是在堆中用malloc手动开辟的。

【命令解析】
ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:"

  • ifconfig -a     
    返回本机所有ip信息
  • grep inet  
    截取包含ip的行
  • grep -v 127.0.0.1
    去掉本地指向的那行
  • grep -v inet6
    去掉包含inet6的行
  • awk { print $2}
    $2 表示默认以空格分割的第二组 同理 $1表示第一组?
  • tr -d "addr:
    删除"addr:"这个字符串

其他方法:
2. FIFO命名管道 + 重定向 (和pipe思路基本一致)
3. 临时文件 + 重定向(重定向可用dup实现也可以在bash命令用 > 等实现)
4. popen函数

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-03-13 22:13:16  更:2022-03-13 22:13:18 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 1:45:53-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码