手机QQ手机文件助手手有什么功能

解析如何在C语言中调用shell命令的实现方法
&1、system(执行shell 命令)相关函数 fork,execve,waitpid,popen表头文件 #include&stdlib.h&定义函数 int system(const char * string);函数说明 system()会调用fork()产生子进程,由子进程来调用/bin/sh-cstring来执行参数string字符串所代表的命令,此命令执行完后随即返回原调用的进程。在调用system()期间SIGCHLD 信号会被暂时搁置,SIGINT和SIGQUIT 信号则会被忽略。返回值 如果system()在调用/bin/sh时失败则返回127,其他失败原因返回-1。若参数string为空指针(NULL),则返回非零值。如果system()调用成功则最后会返回执行shell命令后的返回值,但是此返回值也有可能为system()调用/bin/sh失败所返回的127,因此最好能再检查errno 来确认执行成功。附加说明 在编写具有SUID/SGID权限的程序时请勿使用system(),system()会继承环境变量,通过环境变量可能会造成系统安全的问题。范例: 代码如下:#include&stdlib.h&main(){system(“ls -al /etc/passwd /etc/shadow”);}2、popen(建立管道I/O)相关函数 pipe,mkfifo,pclose,fork,system,fopen表头文件 #include&stdio.h&定义函数 FILE * popen( const char * command,const char * type);函数说明 popen()会调用fork()产生子进程,然后从子进程中调用/bin/sh -c来执行参数command的指令。参数type可使用“r”代表读取,“w”代表写入。依照此type值,popen()会建立管道连到子进程的标准输出设备或标准输入设备,然后返回一个文件指针。随后进程便可利用此文件指针来读取子进程的输出设备或是写入到子进程的标准输入设备中。此外,所有使用文件指针(FILE*)操作的函数也都可以使用,除了fclose()以外。返回值 若成功则返回文件指针,否则返回NULL,错误原因存于errno中。错误代码 EINVAL参数type不合法。注意事项 在编写具SUID/SGID权限的程序时请尽量避免使用popen(),popen()会继承环境变量,通过环境变量可能会造成系统安全的问题。范例:
代码如下:#include&stdio.h& main() { FILE * char buffer[80]; fp=popen(“cat /etc/passwd”,”r”); fgets(buffer,sizeof(buffer),fp); printf(“%s”,buffer); pclose(fp); }执行 root :x:0 0: root: /root: /bin/bash3、使用vfork()新建子进程,然后调用exec函数族 代码如下:#include&unistd.h&main(){&&& char * argv[ ]={“ls”,”-al”,”/etc/passwd”,(char*) };&&& if(vfork() = =0)&&& {&&&&&&& execv(“/bin/ls”,argv);&&& }else{&&&&&&& &&&&&&& printf(“This is the parent process\n”);&&& }}
顶一下(0) 踩一下(0)
热门标签:Linux&C中调用shell命令
很多时候我们需要在我们所编写的C程序当中,调用一行命令,在命令行运行的命令,比如ifconfig,ls,或者是其他需要的命令如mpirun
-machinefile host -np *
./*(MPI并行程序)等等,这就要求我们能够在Linux下调用shell命令。
Linux的C就为我们提供了一个可以调用shell命令的函数,它就是system()。
system函数调用/bin/sh,执行特定的shell命令,阻塞当前的进程直到shell命令执行完毕,才重新回到当前进程。调用它的格式为:
#include &stdlib.h&
int system(const char *command);//command就是我们要执行的各种命令,例如“mpirun -np
执行system实际上是调用了fork函数(产生新进程)、exec函数(在新进程中执行新任务)、waitpid函数(等待新进程结束)。
我们给出一个简单的system函数举例:
#include &stdlib.h&
int main(int argc,char **argv)
&&& system("lfs
-l");& //调用shell命令 ls -l
system("ifconfig");//调用ifconfig
system("mpirun -np 2
./cpi");//调用mpi并行程序命令
&&& return
参考资料来源:
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。您当前的位置:&&&&&正文
解析如何在C语言中调用shell命令的实现方法
&1、system(执行shell 命令)相关函数 fork,execve,waitpid,popen表头文件 #include&stdlib.h&定义函数 int system(const char * string);函数说明 system()会调用fork()产生子进程,由子进程来调用/bin/sh-cstring来执行参数string字符串所代表的命令,此命令执行完后随即返回原调用的进程。在调用system()期间SIGCHLD 信号会被暂时搁置,SIGINT和SIGQUIT 信号则会被忽略。返回值 如果system()在调用/bin/sh时失败则返回127,其他失败原因返回-1。若参数string为空指针(NULL),则返回非零值。如果system()调用成功则最后会返回执行shell命令后的返回值,但是此返回值也有可能为system()调用/bin/sh失败所返回的127,因此最好能再检查errno 来确认执行成功。附加说明 在编写具有SUID/SGID权限的程序时请勿使用system(),system()会继承环境变量,通过环境变量可能会造成系统安全的问题。范例:#include&stdlib.h&main(){system(“ls -al /etc/passwd /etc/shadow”);}2、popen(建立管道I/O)相关函数 pipe,mkfifo,pclose,fork,system,fopen表头文件 #include&stdio.h&定义函数 FILE * popen( const char * command,const char * type);函数说明 popen()会调用fork()产生子进程,然后从子进程中调用/bin/sh -c来执行参数command的指令。参数type可使用“r”代表读取,“w”代表写入。依照此type值,popen()会建立管道连到子进程的标准输出设备或标准输入设备,然后返回一个文件指针。随后进程便可利用此文件指针来读取子进程的输出设备或是写入到子进程的标准输入设备中。此外,所有使用文件指针(FILE*)操作的函数也都可以使用,除了fclose()以外。返回值 若成功则返回文件指针,否则返回NULL,错误原因存于errno中。错误代码 EINVAL参数type不合法。注意事项 在编写具SUID/SGID权限的程序时请尽量避免使用popen(),popen()会继承环境变量,通过环境变量可能会造成系统安全的问题。范例: #include&stdio.h& main() { FILE *
fp=popen(“cat /etc/passwd”,”r”); fgets(buffer,sizeof(buffer),fp); printf(“%s”,buffer); pclose(fp); }执行 root :x:0 0: root: /root: /bin/bash3、使用vfork()新建子进程,然后调用exec函数族#include&unistd.h&main(){&&& char * argv[ ]={“ls”,”-al”,”/etc/passwd”,(char*) };&&& if(vfork() = =0)&&& {&&&&&&& execv(“/bin/ls”,argv);&&& }else{&&&&&&& &&&&&&& printf(“This is the parent process\n”);&&& }}--博才网
下页更精彩:
点击排行榜
〖〗链接地址:
解析如何在C语言中调用shell命令的实现方法由网友原创或转发,若解析如何在C语言中调用shell命令的实现方法侵犯到您的权益,请及时通知我们(QQ:),谢谢!
微信查看最新信息微信扫一扫或用微信搜索微信号:hbrc-com
安卓手机客户端更省流量手机扫描下载或者直接
猜你还喜欢的文章
热点文章排行榜
• 版权所有 Copyright 2011 All rights reserved.新手园地& & & 硬件问题Linux系统管理Linux网络问题Linux环境编程Linux桌面系统国产LinuxBSD& & & BSD文档中心AIX& & & 新手入门& & & AIX文档中心& & & 资源下载& & & Power高级应用& & & IBM存储AS400Solaris& & & Solaris文档中心HP-UX& & & HP文档中心SCO UNIX& & & SCO文档中心互操作专区IRIXTru64 UNIXMac OS X门户网站运维集群和高可用服务器应用监控和防护虚拟化技术架构设计行业应用和管理服务器及硬件技术& & & 服务器资源下载云计算& & & 云计算文档中心& & & 云计算业界& & & 云计算资源下载存储备份& & & 存储文档中心& & & 存储业界& & & 存储资源下载& & & Symantec技术交流区安全技术网络技术& & & 网络技术文档中心C/C++& & & GUI编程& & & Functional编程内核源码& & & 内核问题移动开发& & & 移动开发技术资料ShellPerlJava& & & Java文档中心PHP& & & php文档中心Python& & & Python文档中心RubyCPU与编译器嵌入式开发驱动开发Web开发VoIP开发技术MySQL& & & MySQL文档中心SybaseOraclePostgreSQLDB2Informix数据仓库与数据挖掘NoSQL技术IT业界新闻与评论IT职业生涯& & & 猎头招聘IT图书与评论& & & CU技术图书大系& & & Linux书友会二手交易下载共享Linux文档专区IT培训与认证& & & 培训交流& & & 认证培训清茶斋投资理财运动地带快乐数码摄影& & & 摄影器材& & & 摄影比赛专区IT爱车族旅游天下站务交流版主会议室博客SNS站务交流区CU活动专区& & & Power活动专区& & & 拍卖交流区频道交流区
白手起家, 积分 91, 距离下一级还需 109 积分
论坛徽章:0
因为license问题一个命令要执行好几次,直到抢到license
如何写一个脚本,把命令放进去直到命令执行成功,求高手指导
&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp
巨富豪门, 积分 25061, 距离下一级还需 14939 积分
论坛徽章:69
本帖最后由 zhaopingzi 于
22:52 编辑
while 抢不到licese
do
抢license
done
复制代码
白手起家, 积分 91, 距离下一级还需 109 积分
论坛徽章:0
zhaopingzi while()
& &calibre -drc -hier ./rul
end
复制代码其中while的挑件写什么??
我的想法是命令执行成功与否有没有什么标志?
巨富豪门, 积分 25061, 距离下一级还需 14939 积分
论坛徽章:69
本帖最后由 zhaopingzi 于
23:02 编辑
抢license
if [ $? = 0 ]; then
嗷耶!抢到了
else
靠,没抢到
fi
复制代码
白手起家, 积分 91, 距离下一级还需 109 积分
论坛徽章:0
zhaopingzi
哦,明白了
不知道有个$?这个东西
白手起家, 积分 91, 距离下一级还需 109 积分
论坛徽章:0
guoweiqust
& & 不好意思,再问个问题
请指点一下
白手起家, 积分 91, 距离下一级还需 109 积分
论坛徽章:0
zhaopingzi
& & cshell中一旦命令执行出错了就自动退出了,没法继续执行啊
巨富豪门, 积分 25061, 距离下一级还需 14939 积分
论坛徽章:69
写到循环里面啊,没抢到就重执行,抢到就exit
白手起家, 积分 91, 距离下一级还需 109 积分
论坛徽章:0
zhaopingzi %echo $status
%0
%cp
cp: missing file argument
Try `cp --help' for more information.
%echo $status
%1复制代码但是,但我写在循环中时
set $status=1
while ($status == 1)
echo $status
但是我执行的结果是:
set status=1
while ( 1 == 1 )
cp: missing file argument
Try `cp --help' for more information.
while ( 0 == 1 )
直接就退出了,理论上不是应该进入无限循环吗?
白手起家, 积分 91, 距离下一级还需 109 积分
论坛徽章:0
zhaopingzi
& & 已经搞明白了,多谢指点

我要回帖

更多关于 腾讯手机应用助手 的文章

 

随机推荐