大家好,小沃这里为大家献上一点小技巧,关于linux中,如何让c语言代码向shell一样可以直接运行,其实这个技巧只是小沃在多年运维经验中所获得的一点小感悟而已。
大家知道,linux的c编程功能强大,而linux的shell编程可以调用很多系统命令。
c的好处在于它会将语言转化为二进制码,而二进制码的执行效率以及占用系统资源都比shell少很多。
shell的好处在于很多linux c需要包入很多的类库,需要写好几百行代码才能实现的事情,shell一句话就搞定了。
因此linux的c编程与shell编程可以说是各有千秋。
但是shell编程有一个非常大的好处,那就是编写后无需编译,直接运行。您可以将源代码直接放入生产环境中然后运行。如果生产环境有问题,直接修改shell然后执行就可以解决问题。
那么,这样的好处我们应该如何将其移植到c语言环境中去呢?
小沃就自己写了一个脚本,能够让linux的c语言直接被执行。
不卖关子了,直接告诉大家我是怎么处理的吧。秘密就是,通过个脚本,直接编译c语言,然后执行c语言生成的二进制文件。
第一步
判断当前的文件夹下面是否有与打算生成的文件名重名的文件,如果有,修改我们打算生成的文件名。
其方法是利用shell中的-f与-d命令,判断当前目录的文件名情况。
第二步
编译c源代码,这里用到了gcc的命令,我们不需要用过多的命令,使用最常见的"gcc 源码.c -o 二进制"这样就可以了。
第三步
执行"二进制"文件,这里就需要注意了,因为我们是模拟shell运行方式,所以不需要保留生成后的二进制文件,那么这里就必须将原来的可执行文件删除才行,因此唤起时必须采用多线程技术,也就是在执行后添加一个"&"。
第四步
使用wait命令让主线程在c没有执行完毕时阻塞
二话不说,上代码:#!/bin/bash
if [ $# -eq 0 ];then
echo "parameter error"
exit
fi
if [ -f $1.exe ] || [ -d $1.exe ]; then
NUM=1
while [ -f $1.exe.$NUM ] || [ -d $1.exe.$NUM ]
do
NUM=$(($NUM+1))
done
NAME=$1.exe.$NUM
else
NAME=$1.exe
fi
echo $NAME
gcc $1 -o $NAME || exit $?
./$NAME &
sleep 1
rm $NAME
wait
将上面的代码保存,然后放到/bin/下面就能实现刚才我所描述的功能了。
小沃不仅是研发能力强,服务器运维也是很厉害的哦。如果有这方便的需求,可以联系小沃哦。