C++ 如何从C++;程序
Bash脚本非常有用,可以节省大量编程时间。那么,如何在C++程序中启动BASH脚本呢?另外,如果你知道如何让用户成为超级用户,那也很好。谢谢 使用C++ 如何从C++;程序,c++,linux,bash,shell,C++,Linux,Bash,Shell,Bash脚本非常有用,可以节省大量编程时间。那么,如何在C++程序中启动BASH脚本呢?另外,如果你知道如何让用户成为超级用户,那也很好。谢谢 使用系统功能 system("myfile.sh"); // myfile.sh should be chmod +x #包括 #包括 // .... 系统(“my_bash_script.sh”); 唯一的标准强制实现依赖方式是使用stdlib.h中的system()函数 另外,如果你知道如何让用户成为超级用户,那也很好 您希望脚本以超级用户身份运行
系统
功能
system("myfile.sh"); // myfile.sh should be chmod +x
#包括
#包括
// ....
系统(“my_bash_script.sh”);
唯一的标准强制实现依赖方式是使用stdlib.h
中的system()
函数
另外,如果你知道如何让用户成为超级用户,那也很好
您希望脚本以超级用户身份运行,还是希望提升C可执行文件的权限?前者可以用sudo
完成,但在使用sudo
之前,您需要知道一些事情
如果你知道如何让用户成为超级用户,那也很好。谢谢强>
苏多。苏。chmod 04500。(setuid()&seteuid(),但它们要求您已经是root用户。例如chmod'ed 04***)
保重。这些可以打开“有趣的”安全漏洞
根据您正在做的事情,您可能不需要root。(例如:我经常使用chmod/chown/dev设备(串口等)(在sudo root下),这样我就可以从我的软件中使用它们,而不必使用root。另一方面,这在加载/卸载内核模块时效果不太好…,因为这是一个非常老的问题,而且这个方法还没有被添加(除了
系统()
call function)我想包括使用C二进制文件本身创建shell脚本会很有用。shell代码将保存在文件.c
源文件中。下面是一个代码示例:
#include <stdio.h>
#include <stdlib.h>
#define SHELLSCRIPT "\
#/bin/bash \n\
echo -e \"\" \n\
echo -e \"This is a test shell script inside C code!!\" \n\
read -p \"press <enter> to continue\" \n\
clear\
"
int main() {
system(SHELLSCRIPT);
return 0;
}
#包括
#包括
#定义SHELLSCRIPT“\
#/bin/bash\n\
echo-e\“\”\n\
echo-e\“这是C代码中的一个测试shell脚本\“\n\
阅读-p \“按继续\”\n\
清楚的\
"
int main(){
系统(shell脚本);
返回0;
}
基本上,简而言之(双关语),我们定义脚本名称,充实脚本,用双引号将它们括起来(同时在shell代码中插入适当的转义以忽略双引号),然后使用
system()调用该脚本的名称,在本例中是SHELLSCRIPT
函数位于main()
谢谢,但您忘了包括以下内容:系统(“./myfile.sh”);当前目录
不应位于$PATH
@KeithThompson中。不过,脚本不必位于当前目录中。关键是,系统
函数中不需要在脚本前面加“.”前缀。@MehrdadAfshari:这个怎么样。如果脚本位于当前目录中,则应使用/
。如果它在您的$PATH
中的某个地方,请不要使用/
。(
可能不应该在$PATH
中,也绝对不应该在$PATH
前面)系统()必须小心使用。根据它的手册页:不要从具有设置用户ID或设置组ID权限的程序中使用system()
,因为某些环境变量的奇怪值可能被用来破坏系统完整性。请改用exec(3)
函数系列,但不要使用execlp(3)
或execvp(3)
<事实上,在/bin/sh
为bash版本2的系统上,code>system()
在具有设置用户ID或设置组ID权限的程序中无法正常工作,因为bash 2在启动时会删除权限。如果bash脚本将一些文本回显到tty,该怎么办?例如,如果它是一只“猫”呢?c程序能有那个输出吗?这要等到进程完成吗?
#include <stdio.h>
#include <stdlib.h>
#define SHELLSCRIPT "\
#/bin/bash \n\
echo -e \"\" \n\
echo -e \"This is a test shell script inside C code!!\" \n\
read -p \"press <enter> to continue\" \n\
clear\
"
int main() {
system(SHELLSCRIPT);
return 0;
}