首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

linux C编程中怎样调用shell命令?该怎么解决

2012-06-09 
linux C编程中怎样调用shell命令?比如有这样的代码:void main(){system(curl http://localhost/test.html

linux C编程中怎样调用shell命令?
比如有这样的代码:

void main(){
system("curl http://localhost/test.html");//我想执行一个curl命令,而且,这个shell命令执行是异步的,不能阻塞后面的printf语句执行
printf("over");
}

[解决办法]
多线程吧
[解决办法]
除非开辟另外的线程才能完全异步,并使用fork+exec+pipe将结果传回到父进程,其他再怎么设计得根据程序需求说了。

简单点不需要你懂太多原理,popen就可以了。
[解决办法]
1. sysytem
2. fork - exec*
3. popen
[解决办法]
就单单你这个问题回答吧。

linux C编程中怎样调用shell命令?

system("ps -l"); 里面就可以写shell命令。 

想不阻塞的话直接加个&后台运行~~

像我经常这样来创建路径
sprintf(acBuff,"mkdir %s",PATH_Buff);
system(acBuff);

希望对你有帮助!
[解决办法]
都说了放到线程里执行了,不是命令阻塞了,是waitpid阻塞在那里, 懂吗?

popen是不阻塞的, 但你要想办法获知子进程退出后调用pclose将进程waitpid回收并将pipe关闭。



除了上面现成的接口,你如果会LinuxC开发就简单了,fork, exec,父进程可以捕获SIGCHLD在里面非阻塞waitpid回收进程即可,或者你的程序属于一个轮询结构,那么可以在轮询里waitpid。
[解决办法]

探讨

就单单你这个问题回答吧。

linux C编程中怎样调用shell命令?

system("ps -l"); 里面就可以写shell命令。

想不阻塞的话直接加个&后台运行~~

像我经常这样来创建路径
sprintf(acBuff,"mkdir %s",PATH_Buff);
system(acBuff);

希望对你有帮助!

[解决办法]
加&可以的 也可以execl()函数
[解决办法]
system("curl http://localhost/test.html &");
就可以了,最简单。
[解决办法]
我错了,&切后台进程组了,父进程wait不到就返回 ECHILD 了。
[解决办法]
创建一个线程,在线程里调用system

热点排行