利用popen执行linux程序
要想远程执行服务器上的程序,使用socket调用popen函数是个不错的选择popen使用FIFO管道执行外部程序。#includeFILE *popen(const char *command, const char *type);int pclo
·
要想远程执行服务器上的程序,使用socket调用popen函数是个不错的选择
popen使用FIFO管道执行外部程序。
#include <stdio.h>
FILE *popen(const char *command, const char *type);
int pclose(FILE *stream);
popen 通过type是r还是w确定command的输入/输出方向,r和w是相对command的管道而言的。
r表示command从管道中读入,w表示 command通过管道输出到它的stdout,popen返回FIFO管道的文件流指针。
pclose则用于使用结束后关闭这个指针。
写一个hello.c测试代码
#include <stdio.h>
void main()
{
printf("hello\n");
}
执行gcc hello.c -o hello命令生成一个可执行文件:hello
在同一个目录下写一个popen的测试程序popen.c:
#include <stdio.h>
#define BUFSIZE 8192
int execute(char *command,char *buf,int bufmax);
int main(int argc,char*argv[])
{
int sn;
char buf[BUFSIZE];
sn=execute("./hello",buf,BUFSIZE);
printf("%s",buf);
return 1;
}
int execute(char* command,char* buf,int bufmax)
{
FILE* fp;
int i;
if((fp=popen(command,"r"))==NULL){
i=sprintf(buf,"error command line:%s \n",command);
}else{
i=0;
while((buf[i]=fgetc(fp))!=EOF && i<bufmax-1)
i++;
pclose(fp);
}
buf[i]='\0';
return i;
}
执行gcc popen.c -o popen命令生成一个可执行文件:popen
执行./popen命令,得到hello字符串。
---------------------------------------------------------------------------------------------------
写一个hello.sh脚本文件:
#!/bin/sh
#this shell test print a string : hello
echo -n $string "hello \n"
将popen.c:的
sn=execute("./hello",buf,BUFSIZE);
改为
sn=execute("./hello.sh",buf,BUFSIZE);
间接执行脚本文件,同样可以得到hello字符串
---------------------------------------------------------------------------------------------------
有的可执行文件是带参数的,这样搞:
int main(int argc,char*argv[])
{
int sn;
char buf[BUFSIZE];
char url[200];
char exPara[300];
sscanf("rtsp://admin:12345@192.168.0.64","%s",url);//test url参数
sscanf("/home/administrator/live/live/testProgs/openRTSP","%s",exPara);//openrtsp 可执行文件位置
strcat(exPara," ");
strcat(exPara,url);
printf("%s\n",exPara);
sn=execute(exPara,buf,BUFSIZE);
printf("%s",buf);
return 1;
}
更多推荐
已为社区贡献1条内容
所有评论(0)