通过C程序运行Shell命令,使用execlp函数

execlp的几个参数分别为:文件名,各个参数,(char*)0

其中“各个参数”部分中的第一个参数就是文件名(相当于文件名要输入两遍)

最后一个参数写(char*)0就可以了

文件b.cpp代码:

循环地输入命令→执行命令,直到按下Ctrl+C结束

#include

#include

#include

#include

using namespace std;

#define MAX_PARA_NUMS 10

#define MAX_CHAR_EACH_PARA 1000

int split(char* input, char output[MAX_PARA_NUMS][MAX_CHAR_EACH_PARA])

{

int counter = 0;

int len = strlen(input);

bool bTemp = false;

int i, j = 0;

for(i = 0; i < len; i++)

{

if(input[i] == ' ')

{

if(j != 0 && counter > 0)

{

output[counter - 1][j] = '\0';

}

bTemp = false;

}

else

{

if(bTemp == false)

{

j = 0;

counter++;

bTemp = true;

}

output[counter - 1][j] = input[i];

j++;

}

}

return counter;

}

int main()

{

int counter = 0;

char params[MAX_PARA_NUMS][MAX_CHAR_EACH_PARA];

//使用g++编译文件

//execlp("g++", "g++", "a.cpp", "-o", "a", (char*)0);

char buf[4096];

pid_t pid;

int status;

//输入PROMPT字符串

printf("CONSOLE-X\n");

printf("=========\n");

while (fgets(buf, 4096, stdin) != NULL)

{

if (buf[strlen(buf) - 1] == '\n')

{

buf[strlen(buf) - 1] = '\0';

}

pid = fork();

if (pid < 0)

{

printf("fork error");

}

else if (pid == 0)

{

counter = split(buf, params);

if(counter != 0)

{

printf("---------\n");

}

switch(counter)

{

case 0: break;

case 1:

{

execlp(params[0], params[0], (char*)0);

}

break;

case 2:

{

execlp(params[0], params[0], params[1], (char*)0);

}

break;

case 3:

{

execlp(params[0], params[0], params[1], params[2],

(char*)0);

}

break;

case 4:

{

execlp(params[0], params[0], params[1], params[2],

params[3], (char*)0);

}

break;

case 5:

{

execlp(params[0], params[0], params[1], params[2],

params[3], params[4], (char*)0);

}

break;

case 6:

{

execlp(params[0], params[0], params[1], params[2],

params[3], params[4], params[5], (char*)0);

}

break;

case 7:

{

execlp(params[0], params[0], params[1], params[2],

params[3], params[4], params[5], params[6], (char*)0);

}

break;

case 8:

{

execlp(params[0], params[0], params[1], params[2],

params[3], params[4], params[5], params[6],

params[7], (char*)0);

}

break;

case 9:

{

execlp(params[0], params[0], params[1], params[2],

params[3], params[4], params[5], params[6],

params[7], params[8], (char*)0);

}

break;

case 10:

{

execlp(params[0], params[0], params[1], params[2],

params[3], params[4], params[5], params[6],

params[7], params[8], params[9], (char*)0);

}

break;

default:

{

printf("Illegal Input!\n");

}

break;

}

}

else

{

//输入PROMPT字符串

//printf("CONSOLE-X> ");

}

}

return 0;

}

将b.cpp编译成可执行的文件b(输入命令:g++ b.cpp -o b)

然后打开文件b,依次输入命令

ls -ls

cat a.cpp

g++ a.cpp -o a

./a

文件a.cpp代码:

#include

using namespace std;

int main()

{

cout << "Hello World!" << endl;

return 0;

}

运行结果示例:

END

java execlp_Linux下的C程序,使用函数execlp运行Shell命令相关推荐

  1. 【Groovy】Groovy 代码创建 ( 使用 Java 语法实现 Groovy 类和主函数并运行 | 按照 Groovy 语法改造上述 Java 语法规则代码 )

    文章目录 一.创建 Groovy 代码文件 二.使用 Java 语法实现 Groovy 类和主函数并运行 三.按照 Groovy 语法改造上述 Java 语法规则代码 一.创建 Groovy 代码文件 ...

  2. python程序捕获subprocess.Popen运行cmd命令的实时输出

    Python学习记录,如果帮到你,评论里鼓励一下(手动滑稽),谢谢. python程序捕获subprocess.Popen运行cmd命令的实时输出 概述 疑问 展望 概述 我使用python调用pyq ...

  3. gl linux qt 库_Linux下Qt应用程序的发布(使用LDD命令查看所有依赖的库文件)

    最近一直在学习Qt,用Qt写了一个程序,但是不知道怎么发布,网上说的都是在windows下怎么发布Qt应用程序,但是,在windows下Qt应用程序依赖的库文件与linux下的名字不同.于是,我就想到 ...

  4. php实现linux命令,PHP在Linux下运行Shell命令

    原本在本机开发PHP的时候,Shell调用一切正常.上线的时候才反应到线上的服务器对权限做了严格的控制,一顿折腾之后梳理出在严格权限控制的Linux上如何通过Nginx/Apache 以Web的方式调 ...

  5. 在vc6控制台程序中如何调用运行ImageMagick命令行工具

    在http://www.imagemagick.org/script/index.php网站下载相应的执行文件,这里以下载ImageMagick-6.6.5-10-Q16-windows-static ...

  6. Java 从虚拟机层面看程序代码是怎么运行起来的

    专栏原创出处:github-源笔记文件 ,github-源码 ,欢迎 Star,转载请附上原文出处链接和本声明. Java JVM-虚拟机专栏系列笔记,系统性学习可访问个人复盘笔记-技术博客 Java ...

  7. MAC下如何打开程序和调出终端运行窗口

    Mac 程序打开方式 下方菜单栏点击这个图标 就进入程序列表了 当然并不是所有程序都能在列表中找到,这个时候需要搜索! 拿终端为例,搜索框中输入terminal 点击右侧的这个"终端&quo ...

  8. 点餐系统后台服务器部署,Java后台——点餐小程序在服务器上运行点餐系统供别人访问...

    ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzMzN ...

  9. Linux下如何让程序以管理员权限运行

    以QQ为例(QQ路径:/usr/local/qq): 1.进入root:                                  :~$           sudo su 2.run qq ...

  10. python是在linux系统下运行的吗_Linux系统下python代码运行shell命令的方法

    方法一:os.popen #!/usr/bin/python#-*- coding: UTF-8 -*- importos, sys#使用 mkdir 命令 a = 'ls'b= os.popen(a ...

最新文章

  1. Cell:人体细菌到究竟有多少,再作报告必引此文
  2. Anton and Fairy Tale CodeForces - 785C(二分+思维)
  3. Underscore.js常用方法介绍
  4. 谷歌母公司将分拆出新量子公司,名为“沙箱”
  5. Mysql主备延迟的来源
  6. leetCode----day01---- 从排序数组中删除重复项
  7. php升序排列,php 基础问题表单里面怎么升序和降序?
  8. 图形化编程 html,c++图形界面编程
  9. 微信公众号开发(一)--开发模式与编辑模式
  10. Asp.net Core使用Microsoft.Office.Interop.Word转换文档
  11. android访问win10共享文件夹,手机怎么用ES浏览器访问Win10共享文件教程
  12. vue 项目中实现pdf预览 pdf打印 pdf下载
  13. python读取文件r_python读入文件时加r的作用?
  14. Linux 安装AndroidSdk 并使用zipalign对齐工具完成apk的签名
  15. 按钮点击事件(java)
  16. Genesis 社区答疑—第一期
  17. html认识时间游戏,认识时间教学设计
  18. 【机器学习sklearn】决策树(Decision Tree)算法
  19. 2018秋c语言程序设计考试答案,2018秋C语言程序设计上(赵三元)-中国大学mooc-题库零氪...
  20. 虚拟期货开户(期货虚拟盘是什么什么意思)

热门文章

  1. 激光SLAM之Cartographer源码解析视频课程
  2. DFA极简化和NFA确定化
  3. 斯坦福大学深度学习公开课cs231n学习笔记(8)神经网络学习过程中的检查事项和参数调优
  4. python 正则表达式简介
  5. Java正则表达式判断一个字符串是否是ipv4地址
  6. Python 大文件处理
  7. 用PHP爬取知乎的100万用户
  8. Python学习笔记(五)--Python数据类型-数字及字符串
  9. tp5 + 百度编辑器 +七牛云存储的实现办法
  10. django-xadmin隐藏菜单不显示