实际需求

突发奇想,在手写一个自动配置网卡信息时,需手动算出子网掩码后再添加,比如/24 对应子网掩码为255.255.255.0,如果是其他掩码呢比如/21、/17 等等,你还要算几秒钟,多唠哦,用程序实现就很快了,我这里用shell和c混合编程来计算例如/23子网掩码为255.255.254.0 下面介绍方法 。

  • 思路:

c程序:实现子网计算并返回输出,

shell脚本:对192.168.100.1/23分割并调用c程序计算,然后输出

C语言代码:

#include"stdio.h"
#include<stdlib.h>
/*求子网掩吗,比如/23 转换为255.255.254.0单位实现
*/int getmask(int n) //转换为掩吗标准格式
{int ns[]={128,64,32,16,8,4,2,1};int y=0,sum=0;y=n%8;if(n==8)return 255;for(int j=0;j<y;j++)/*将2转换为192*/sum+=ns[j];return sum;}int main(int argc,char *argv[])
{int ns[]={128,64,32,16,8,4,2,1};int i,n,y,sum=0;int mask[]={0,0,0,0};  //存放子网掩吗n=atoi(argv[1]);        //将命令行参数字符串转数字if(argc==2&&n>0&&n<33){for(i=0;i<n/8;i++){mask[i]=getmask(8);}mask[i]=getmask(n%8);printf("%d.%d.%d.%d\n",mask[0],mask[1],mask[2],mask[3]);}else{printf("255.255.255.0\n");  //默认掩码/24}}

编写好c代码后用gcc编译成可执行文件

gcc -c set_ip.c

gcc set_ip.o -o set_ip.exe

调用c程序结果如下:

shell代码:

考虑到用c语言做字符串切割比较麻烦下面写了个shell脚本来实现

#!/bin/bashnetmask=255.255.255.0     #默认子网掩吗#获得ip段和掩吗数字段
ip=`echo $1 | awk -F/ '{print $1}'`
nm=`echo $1 | awk -F/ '{print $2}'`#判断ip后面有无参数
if [ -z $nm ];thennetmask=255.255.255.0  #没传参数默认掩码
elsenetmask=`./set_ip.exe $nm`       ##调用c程序set_ip.exe
fi#输出结果
echo "     ip: $ip"
echo "netmask: $netmask"

shell调用c程序结果:

注意:确保你c的执行程序和shell脚本在同一路径下!你的shell脚本要有执行权限

chmod u+x 脚本名                            #加执行权限

./shell脚本名   192.168.100.1/24     #脚本名你自己随便取 ,后面掩码/24你也可以不加默认为/24

总结:实际证明shell可以很好的调用c程序,有同样想法的小伙伴可以参考哦,本脚本掩码计算功能实现了 ,如果自己还有兴趣可以扩展一下,比如说通过掩码求网络号和主机号等等。编程最重要的就是要有骚想法,解决实际问题,不然没啥意思。哈哈。

shell调用c程序,求子网掩码相关推荐

  1. 【Linux】shell调用Java程序main方法通过crontab定时执行

    来源:https://blog.csdn.net/coolcooldool/article/details/51775105 最近一个项目需要写一个batch定时读取文件往数据库里插入记录,第一次写, ...

  2. Activexobject(“wscript.shell“)对象调用本地程序

    Activexobject("wscript.shell")对象调用本地程序 function demo(){var path = "cmd.exe /c D: & ...

  3. abd shell关闭所有程序_第十六章 Shell编程

    第十六章 Shell编程 16.1 shell脚本运行 所谓脚本,就是把众多命令写入一个文件中,让其按照一定的逻辑顺序执行,以完成一个具体的功能.而在Linux的shell编译环境下,shell编程与 ...

  4. C# 系统应用之调用SDelete程序粉碎文件及基础原理知识

    在"个人电脑清除软件"中需要对文件进行彻底粉碎,使其不可恢复.这篇文章主要讲述的是Windows文件系统及调用SDelete程序彻底粉碎文件,希望文章对大家有所帮助. 一.Wind ...

  5. qtp启动java程序_转: QTP六脉神剑之调用Java程序

    查看( 1147 ) / 评论( 21 ) 六脉神剑之调用程 序0Xp1zLN_0版权声明:原创作品,转载请以链接方式注明出自http://www.51testing.com/?35,否则将追究法律责 ...

  6. href 带参数 打开exe_js调用winform程序(带参数)

    我们会发现,我们点击迅雷下载的时候  网页可以调用应用程序,而且连接会传入迅雷,这个是怎么做到的呢? 原理: 先注册表中添加软件的具体信息,然后通过 href 可以直接调用 1.写入注册表信息,注册, ...

  7. java进程里面调用方法_在java里面调用CUI程序的方法

    在java里面调用CUI程序的方法推荐查看本文HTML版本 在java里面调用CUI程序的方法 问题描述: 该函数在win平台上面调用不是很成功,GUI会可以调出来,但可能和屏蔽调其中的一些用 ...

  8. 用VB轻松调用其他程序

    我们编写程序时,有时会遇到在一个程序中调用并控制另一个程序执行的情况,在一些编程语言中实现起来较为繁琐,但如果用VB编写时,则可轻松实现.下面我就以在程序中调用"计算器"为例,总结 ...

  9. python调用其它程序

    Python中调用外部程序主要是通过两个方法实现的, 一个是os库的 system 函数,另外一个是 subprocess 库. 1.os.system函数 """ 使用 ...

最新文章

  1. 关于两台路由器之间的OSPF邻居关系问题!
  2. 【奇葩面试题】因为太难而被禁用的17道Google面试题
  3. Django横向二级导航栏(鼠标悬空事件)
  4. Java对象转换成Map
  5. CVPR 2020 算法竞赛大盘点
  6. 面向对象基本原则-转载
  7. 华为云ModelArts 3.0助力行业AI高效落地
  8. 软工网络15团队作业8——Beta阶段项目总结
  9. 移动web适配利器-rem
  10. 开源代码审计工具备忘
  11. matlab在电磁波中的应用,MATLAB在电磁波与电磁场课程教学中的应用
  12. Android 测试(Unit Test Instrument Test)
  13. 【Python爬虫】:使用高性能异步多进程爬虫获取豆瓣电影Top250
  14. Windows10 彻底关闭系统更新(2022.12.26更新)
  15. Java程序界面设计
  16. noip 2009 靶形数独
  17. 曾经的银行行长放弃安稳的职业,选择南下创业。
  18. Sql 中两个数除法计算结果等于0原因是什么?
  19. Motoman机器人离线编程——Motocom32开发简介
  20. script引入方式

热门文章

  1. WPF/Silverlight积累
  2. Android + https 实现 文件上传
  3. jzoj4668. 腐败(数论)
  4. Coding and Paper Letter(十)
  5. 随圆通中通脚步,阿里巴巴入股申通获14%股权!
  6. 一文告诉你胜任力模型对企业有多重要
  7. 怎么把ubuntu系统从英文修改为中文界面
  8. 平安好医生发布半年报,“关键先生”方蔚豪寻求变阵|看财报
  9. 平安好医生技术栈的分析【转】
  10. Facebook Surround360 学习笔记--(1)系统简介