LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
12
返回列表 发新帖
楼主: zdh

请问:在linux c程序中怎么嵌入shell命令?

[复制链接]
发表于 2005-5-3 03:01:13 | 显示全部楼层
Post by Freebird
No,一些基本的应用,直接调用系统命令(也就是楼主所说的shell命令)会很方便,比如ls,那如果这些简单的命令都要说到系统调用,岂不自寻烦恼,而且,系统调用,该怎么掉?你知道么?反正我是不知道. :cool:而且写C的时候不仅经常用到shell命令,在Window下,还经常要用到DOS命令.例如在*nix下:
[php]
#include <stdlib.h>
#include <stdio.h>

int main()
{
    printf("Running ps with system\n");
    system("ps -ax");
    printf("Done.\n");
    exit(0);
}
[/php]


当然,如果在C的基本Library中没有,或调用shell还是自己写function就看写程序的人了。我的意思是,在C的Library中有的functions, 直接使用就是了。如,mknod,chdir,chmod,usleep,getpid...等等.
回复 支持 反对

使用道具 举报

发表于 2005-5-3 13:34:23 | 显示全部楼层
第一次发现还有这个窍门,又学了一招,呵呵
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-5-11 09:28:49 | 显示全部楼层
但是exec()族命令不是会覆盖原来的进程吗?
那调用完exec()后面的程序岂不是执行不了了?






Post by Freebird
BTW:当然,你也可以使用exec族命令,比如:

execl("/bin/ps", "ps", "-ax", 0);        
execlp("ps", "ps", "-ax", 0);              
execle("/bin/ps", "ps", "-ax", 0, ps_envp);
execv("/bin/ps", ps_argv);
execvp("ps", ps_argv);
execve("/bin/ps", ps_argv, ps_envp);

NOTES:system并非一个高效的方法,因为当你运行它时,它会启动一个shell,然后执行其中的命令,直到命令执行完毕,才返回原(C)程序,一个解决办法是将shell命令放入后台,例如使用system("ps -ax &");来取代上面的命令.
回复 支持 反对

使用道具 举报

发表于 2005-5-11 11:20:48 | 显示全部楼层
Post by zdh
但是exec()族命令不是会覆盖原来的进程吗?
那调用完exec()后面的程序岂不是执行不了了?


exec()和exec(builtin)一样吗?!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-5-11 17:06:20 | 显示全部楼层
谢谢大家!!!
回复 支持 反对

使用道具 举报

发表于 2005-5-12 16:44:53 | 显示全部楼层
不喜欢第四楼的言语和态度,和linuxsir的风气和精神不符。本来想给他发邮件  ,可是没有his信箱
回复 支持 反对

使用道具 举报

发表于 2005-5-12 16:55:04 | 显示全部楼层
找了一下第四楼发过的帖子 ,呵呵, 原来一个牛人是这样诞生的 , 既然怀念北南在的时候就要好好学习一下linuxsir上无私互助的精神。无语中。。。。。。。。
回复 支持 反对

使用道具 举报

发表于 2005-5-14 10:28:18 | 显示全部楼层
hehe。有时候情不自禁了,就会露出本色,其实我也是一个菜鸟,linux也是刚刚开始玩的,
而当我懂了一点以后,就开始骄傲了,开始指指点点了,以后一定要改,在生活中我也是一个
谦虚严谨的人。4楼的行为是不经意间流露出来的,和我有时候一样。这也是国内很多菜鸟的
弊病,而中国人要完全做到和西方绅士般优雅,也是需要一个过程的,让我们一起努力!
有空多上外国的论坛看看人家怎么发表建议,批评的。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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