shell调用c程序,求子网掩码
实际需求
突发奇想,在手写一个自动配置网卡信息时,需手动算出子网掩码后再添加,比如/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程序,求子网掩码相关推荐
- 【Linux】shell调用Java程序main方法通过crontab定时执行
来源:https://blog.csdn.net/coolcooldool/article/details/51775105 最近一个项目需要写一个batch定时读取文件往数据库里插入记录,第一次写, ...
- Activexobject(“wscript.shell“)对象调用本地程序
Activexobject("wscript.shell")对象调用本地程序 function demo(){var path = "cmd.exe /c D: & ...
- abd shell关闭所有程序_第十六章 Shell编程
第十六章 Shell编程 16.1 shell脚本运行 所谓脚本,就是把众多命令写入一个文件中,让其按照一定的逻辑顺序执行,以完成一个具体的功能.而在Linux的shell编译环境下,shell编程与 ...
- C# 系统应用之调用SDelete程序粉碎文件及基础原理知识
在"个人电脑清除软件"中需要对文件进行彻底粉碎,使其不可恢复.这篇文章主要讲述的是Windows文件系统及调用SDelete程序彻底粉碎文件,希望文章对大家有所帮助. 一.Wind ...
- qtp启动java程序_转: QTP六脉神剑之调用Java程序
查看( 1147 ) / 评论( 21 ) 六脉神剑之调用程 序0Xp1zLN_0版权声明:原创作品,转载请以链接方式注明出自http://www.51testing.com/?35,否则将追究法律责 ...
- href 带参数 打开exe_js调用winform程序(带参数)
我们会发现,我们点击迅雷下载的时候 网页可以调用应用程序,而且连接会传入迅雷,这个是怎么做到的呢? 原理: 先注册表中添加软件的具体信息,然后通过 href 可以直接调用 1.写入注册表信息,注册, ...
- java进程里面调用方法_在java里面调用CUI程序的方法
在java里面调用CUI程序的方法推荐查看本文HTML版本 在java里面调用CUI程序的方法 问题描述: 该函数在win平台上面调用不是很成功,GUI会可以调出来,但可能和屏蔽调其中的一些用 ...
- 用VB轻松调用其他程序
我们编写程序时,有时会遇到在一个程序中调用并控制另一个程序执行的情况,在一些编程语言中实现起来较为繁琐,但如果用VB编写时,则可轻松实现.下面我就以在程序中调用"计算器"为例,总结 ...
- python调用其它程序
Python中调用外部程序主要是通过两个方法实现的, 一个是os库的 system 函数,另外一个是 subprocess 库. 1.os.system函数 """ 使用 ...
最新文章
- 关于两台路由器之间的OSPF邻居关系问题!
- 【奇葩面试题】因为太难而被禁用的17道Google面试题
- Django横向二级导航栏(鼠标悬空事件)
- Java对象转换成Map
- CVPR 2020 算法竞赛大盘点
- 面向对象基本原则-转载
- 华为云ModelArts 3.0助力行业AI高效落地
- 软工网络15团队作业8——Beta阶段项目总结
- 移动web适配利器-rem
- 开源代码审计工具备忘
- matlab在电磁波中的应用,MATLAB在电磁波与电磁场课程教学中的应用
- Android 测试(Unit Test Instrument Test)
- 【Python爬虫】:使用高性能异步多进程爬虫获取豆瓣电影Top250
- Windows10 彻底关闭系统更新(2022.12.26更新)
- Java程序界面设计
- noip 2009 靶形数独
- 曾经的银行行长放弃安稳的职业,选择南下创业。
- Sql 中两个数除法计算结果等于0原因是什么?
- Motoman机器人离线编程——Motocom32开发简介
- script引入方式