LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1820|回复: 9

c++中如何调用shell命令?

[复制链接]
发表于 2003-10-22 16:43:22 | 显示全部楼层 |阅读模式
如题
发表于 2003-10-22 17:36:12 | 显示全部楼层
system
 楼主| 发表于 2003-10-22 17:39:40 | 显示全部楼层
具体怎么作
麻烦说清楚点
谢谢
发表于 2003-10-22 17:41:37 | 显示全部楼层
system(...)

单是有几个概念要分清:
1.shell 命令大多数是一个应用程序,如 ls, rm ,
2. 如果要调用 ls , rm , cat , dd, cp, mv, 等等命令,直接用
   fork &  exec 那一组函数就够了。
3. 如果是一个 shell 脚本程序, 也可以 fork & exec 。
4. 如果是 if , cd , umask, set , export 等命令, 我想调用他们
也没有什么用途。
5. 其实没有什么所谓的 shell 命令 ,大多数都是可运行的程序。
6. system 函数实际运行的是 "/bin/sh -c <string>" 其中 string 是你传递的参数, 也没有什么特殊的。
7. c++ 调用和 C 调用是一样的,都要使用系统调用, system 是库函数。 fork 和 execve 是系统调用, execl execlp execle execv execvp 都是库函数。

所有的 Linux 应用程序调用一个程序都是
fork & exec , 除了 fork 系统调用之外,没有任何创建进程的方法, 除了 exec 系统调用之外,没有任何方法可以运行程序。
 楼主| 发表于 2003-10-22 21:42:36 | 显示全部楼层
多谢了
好像明白了一些
等我再看看
发表于 2003-10-23 08:59:40 | 显示全部楼层
写个简单的程序看一下:

  1. #include<iostream>

  2. using std::cout;
  3. using std::cin;

  4. int
  5. main ()
  6. {
  7.   cout << "mysh# ";
  8.   char cmd[81];
  9.   while(cin.getline(cmd, 80)){
  10.     system(cmd);
  11.     cout << "mysh# ";
  12.   }
  13.   cout << "\n";
  14.   return(0);
  15. }
复制代码

命令行最多输入80个字符,用Ctrl+d结束。
发表于 2003-10-23 10:42:59 | 显示全部楼层
斑竹的code有错误哦,呵呵
那个system函数,在什么地方能找到啊?
就是类似这样的函数,怎么知道的啊?
比较笨的问题,不好意思哦!
发表于 2003-10-23 10:50:37 | 显示全部楼层
哦,我编译的时候倒是没问题,呵呵,
加一行
#include <cstdlib>
再把:
system(cmd);
改成:
std::system(cmd);
发表于 2003-10-23 10:51:51 | 显示全部楼层
找函数直接用
man system
里面有需要include哪个头文件
 楼主| 发表于 2003-10-23 11:50:41 | 显示全部楼层
谢谢版主了
上面的那段代码终于让我明白得差不多了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表