C++执行Linux Bash命令的方法
方法一:fopen()函数
#include#include #include #include #include #include usingnamespacestd; constintN=300; voidTest(void){ charline[N]; FILE*fp; stringcmd="ps-ef|grepjava|awk'{print$2}'"; ////引号内是你的linux指令 //系统调用 constchar*sysCommand=cmd.data(); if((fp=popen(sysCommand,"r"))==NULL){ cout<<"error"< 注意:
popen函数原型:FILE*popen(constchar*command,constchar*type);
popen()会调用fork()产生子进程,然后从子进程中调用ps-ef|grepjava|awk‘{print$2}'来执行参数command的指令。参数type可使用“r”代表读取,“w”代表写入。popen()会建立管道连到子进程的标准输出设备或标准输入设备,然后返回一个文件指针。
随后进程便可利用此文件指针来读取子进程的输出设备或是写入到子进程的标准输入设备中。此外,所有使用文件指针(FILE*)操作的函数也都可以使用,除了fclose()以外。
在编写具SUID/SGID权限的程序时请尽量避免使用popen(),popen()会继承环境变量,通过环境变量可能会造成系统安全的问题。
或者,更简单的:
方法二:system()函数
#includeintmain() { system("ps-ef|grepjava"); //括号内是你的linux指令 return0; } 注意:system()会调用fork()产生子进程,由子进程来调用”ps-ef|grepjava”这个string来执行参数string字符串所代表的命令,此命令执行完后随即返回原调用的进程。所以相比于直接执行ps-ef|grepjava,用这个system()调用会多一个进程id。
在编写具有SUID/SGID权限的程序时请勿使用system(),system()会继承环境变量,通过环境变量可能会造成系统安全的问题。
以上这篇C++执行LinuxBash命令的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。