当前位置:  技术问答>linux和unix

我想在linux下写一个c程序调用linux的可执行文件或者程序,怎么做?

    来源: 互联网  发布时间:2014-12-05

    本文导语:  我想在linux下写一个c程序调用linux的可执行文件或者程序,怎么做? | 这些函数之间的第一个区别是前四个取路径名作为参数,后两个则取文件名作为参数。当指定f i l e n a m e作为参数时...

我想在linux下写一个c程序调用linux的可执行文件或者程序,怎么做?

|
这些函数之间的第一个区别是前四个取路径名作为参数,后两个则取文件名作为参数。当指定f i l e n a m e作为参数时:

• 如果f i l e n a m e中包含/,则就将其视为路径名。
• 否则就按PAT H环境变量,在有关目录中搜寻可执行文件。

PATH变量包含了一张目录表(称为路径前缀),目录之间用冒号( : )分隔。例如下列n a m e = v a l u e环境字符串:
P A T H = / b i n : / u s r / b i n : / u s r / l o c a l / b i n :.
指定在四个目录中进行搜索。(零长前缀也表示当前目录。在v a l u e的开始处可用:表示,在行中间则要用::表示,在行尾以:表示。)

有很多出于安全性方面的考虑,要求在搜索路径中决不要包括当前目录。请
参见Garfinkel 和S p a fford [1991] 。

如果e x e c l p和e x e c v p中的任意一个使用路径前缀中的一个找到了一个可执行文件,但是该文件不是由连接编辑程序产生的机器可执行代码文件,则就认为该文件是一个s h e l l脚本,于是试着调用/ b i n / s h,并以该f i l e n a m e作为s h e l l的输入。


第二个区别与参数表的传递有关( l表示表( l i s t ),v表示矢量( v e c t o r ) )。函数e x e c l、e x e c l p和e x e c l e要求将新程序的每个命令行参数都说明为一个单独的参数。这种参数表以空指针结尾。对于另外三个函数( e x e c v, e x e c v p和e x e c v e ),则应先构造一个指向各参数的指针数组,然后将该数组地址作为这三个函数的参数。

在使用ANSI C原型之前,对e x e c l , e x e c l e和e x e c l p三个函数表示命令行参数的一般方法是:
char * a rg 0, char *a rg 1, ..., char * a rg n, (char *) 0
应当特别指出的是:在最后一个命令行参数之后跟了一个空指针。如果用常数0来表示一个空指针,则必须将它强制转换为一个字符指针,否则它将被解释为整型参数。如果一个整型数的长度与char *的长度不同,e x e c函数实际参数就将出错。


最后一个区别与向新程序传递环境表相关。以e结尾的两个函数( e x e c l e和e x e c v e)可以传递一个指向环境字符串指针数组的指针。其他四个函数则使用调用进程中的e n v i r o n变量为新程序复制现存的环境。通常,一个进程允许将其环境传播给其子进程,但有时也有这种情况,进程想要为子进程指定一个确定的环境。例如,在初始化一个新登录的s h e l l时, l o g i n程序创建一个只定义少数几个变量的特殊环境,而在我们登录时,可以通过s h e l l起动文件,将其他变量加到环境中。在使用ANSI C 原型之前, execle 的参数是:
char * p a t h n a m e, char *a rg 0, ⋯, char *a rg n, (char *)0, char * e n v p[ ]

从中可见,最后一个参数是指向环境字符串的各字符指针构成的数组的指针。而在ANSI C原型中,所有命令行参数,包括空指针, e n v p指针都用省略号(⋯)表示。

|
用exec函数调用,但不能调用执行脚本;
或者用system函数调用,都可以用。

|
:)
4242
我一直都用system的
很好用的
system("/bin/ifconfig >a")
输出到文件a

|
exec并不是它一个是一个系列,呵呵
NAME
     exec, execl, execv, execle, execve, execlp, execvp,  -  exe-
     cute a file

SYNOPSIS
     #include 

     int execl(const char *path, const  char  *arg0,  ...,  const
     char *argn, char * /*NULL*/);

     int execv(const char *path, char *const argv[]);

     int execle(const char *path, const char  *arg0,  ...,  const
     char *argn, char * /*NULL*/, char *const envp[]);

     int execve(const char *path, char *const argv[], char *const
     envp[]);

     int execlp(const char *file, const char  *arg0,  ...,  const
     char *argn, char * /*NULL*/);

     int execvp(const char *file, char *const argv[]);


水流

    
 
 

您可能感兴趣的文章:

  • linux下通过crond实现自动执行程序
  • 为什么linux下的C++程序这么少见? 请问那里有linux下的C++程序?什么类型的程序都可以.
  • Linux下指定运行时加载动态库路径及shell下执行程序默认路径
  • linux上的程序怎样远程启动另一个linux系统上的某个程序
  • 我写了个linux下的网络程序,程序在多个电脑间通信,但是我没有多个电脑,怎么调试这样的程序啊? iis7站长之家
  • 在linux下面怎么安程序啊?我刚裝了一个 linux,下了一个迅雷安装程序,可是不知道怎么安装啊?真心请教。
  • Linux下c/c++开发之程序崩溃(Segment fault)时内核转储文件(core dump)生成设置方法
  • 请指点: 在windows下能否通过程序来获取linux下的用户列表,甚至通过自己写的windows程序界面增加修改linux的用户
  • Linux程序员在公司里做什么程序?(Linux程序员请进)
  • 我的linux程序 如何 在pc机器上运行。现在我用arm-linux-g++ 编译后的程序在我的嵌入设备上运行。
  • Linux 编程怎么样在程序开启一个程序,和关闭一个程序?
  • Linux下的程序是在内存中运行的吗?为什么在程序运行的时候可以删除程序文件?
  • 请指点: 在windows下能否通过程序来获取linux下的用户列表,甚至通过自己写的windows程序界面增加修改linux的用户 100分相赠
  • linux初学者一简单问题!在线送分!linux设备驱动程序一书的第一个程序.
  • 最进想学习LINUX程序设计,想了解一下在LINUX下的C++程序开发工具有哪些?有快速做界面的那种吗?
  • 我写了个linux下的网络程序,程序在多个电脑间通信,但是我没有多个电脑,怎么调试这样的程序啊?
  • linux下,一个程序如何向另一个程序发送消息,另一个程序如何接收
  • 请问载linux下如何调试汇编程序,有没有像debug的程序。
  • linux的程序员是不是比windows程序员的薪水高啊?
  • 菜鸟求助:Linux 应用程序后台启动后关闭窗口程序退出
  • 请教:如何在linux服务器上实现一个程序,该程序可启动远程linux客户端上的一个脚本(sh后缀)的执行
  • Linux添加系统调用时如何调用C语言库函数
  • linux中为什么系统调用比普通函数调用更费时间?
  • 为什么我的BEAN 在WIN2000中调用没有问题,但在LINUX中调用有问题
  • 如何在LINUX下用一个普通文件调用一个自己编写的调用系统的文件
  • LINUX下系统调用是不能中断的,要怎么改造成可以中断系统调用?
  • 请问linux中的系统调用号是如何跟系统调用表对应起来的
  • 新手:Linux下使用第三方C库(openssl),是调用.so文件还是直接调用.h文件?
  • linux系统调用问题
  • 我如何调用 内核函数 /linux/fs 里面的内核 函数:比如 自己的程序调用 ext3_delete_inode
  • 关于Linux系统调用的问题!
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • linux c/c++ IP字符串转换成可比较大小的数字
  • 在win分区上安装linux和独立分区安装linux有什么区别?可以同时安装吗?(两个linux系统)
  • linux哪个版本好?linux操作系统版本详细介绍及选择方案推荐
  • 在虚拟机上安装的linux上,能像真的linux系统一样开发linux程序么?
  • secureCRT下Linux终端汉字乱码解决方法
  • 我重装window后,把linux的引导区覆盖了,进不了linux怎么办?急啊,望热心的人帮助 (现在有linux的盘)
  • Linux c字符串中不可打印字符转换成16进制
  • 安装vmware软件,不用再安装linux系统,就可以模拟linux系统了,然后可以在其上学习一下LINUX下的基本操作 了?
  • Linux常用命令介绍:更改所属用户群组或档案属性
  • 红旗Linux主机可以通过127.0.0.1访问,但如何是连网的Win2000机器通过Linux的IP去访问Linux
  • linux命令大全详细分类介绍及常用linux命令文档手册下载
  • 我重装window后,把linux的引导区覆盖了,进不了linux怎么办?急啊,望热心的人帮助 (现在没有linux的盘,只有DOS启动盘)
  • Linux Kernel 'sctp_v6_xmit()'函数信息泄露漏洞
  • 如何让win2000和linux共存。我装好WIN2000,再装LINUX7.0,但LILO只能找到LINUX,不能引导WIN2000
  • linux c下利用srand和rand函数生成随机字符串
  • 在windows中的VMware装了个linux,主板有两个串口,能做windows和linux的串口通信测试么,怎么测试这两个串口在linux是有效
  • Linux c++虚函数(virtual function)简单用法示例代码
  • 我们网站的服务器从windows2000迁往linux,ASP程序继续使用,可是我连LINUX的皮毛都不了解,大家告诉我LINUX下怎么建网站??
  • Docker官方镜像将会使用Alpine Linux替换Ubuntu
  • 中文Linux与西文Linus分别哪一个版是权威?I认为是:中科软的白旗Linux与西文的绿帽子Linux!大家的看法呢?
  • Linux下chmod命令详细介绍及用法举例
  • 我重装了winme,却进不了Linux了,而我现在又没有Linux光盘,也没有Linux启动盘,还有没有办法?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3