Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何从C++;程序_C++_Linux_Bash_Shell - Fatal编程技术网

C++ 如何从C++;程序

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()函数 另外,如果你知道如何让用户成为超级用户,那也很好 您希望脚本以超级用户身份运行

Bash脚本非常有用,可以节省大量编程时间。那么,如何在C++程序中启动BASH脚本呢?另外,如果你知道如何让用户成为超级用户,那也很好。谢谢

使用
系统
功能

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;
}