shell调用c程序,求子网掩码

在手写自动配置网卡信息时,手动计算子网掩码较麻烦。本文介绍用shell和c混合编程计算子网掩码的方法,c程序实现子网计算,shell脚本进行分割并调用c程序,还给出了编译和调用的代码,最后指出可扩展功能解决实际问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实际需求

      突发奇想,在手写一个自动配置网卡信息时,需手动算出子网掩码后再添加,比如/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/bash

netmask=255.255.255.0     #默认子网掩吗

#获得ip段和掩吗数字段
ip=`echo $1 | awk -F/ '{print $1}'`
nm=`echo $1 | awk -F/ '{print $2}'`

#判断ip后面有无参数
if [ -z $nm ];then

	netmask=255.255.255.0  #没传参数默认掩码
else

	netmask=`./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程序,有同样想法的小伙伴可以参考哦,本脚本掩码计算功能实现了 ,如果自己还有兴趣可以扩展一下,比如说通过掩码求网络号和主机号等等。编程最重要的就是要有骚想法,解决实际问题,不然没啥意思。哈哈。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值