当前位置: 技术问答>linux和unix
关于system函数
来源: 互联网 发布时间:2016-06-02
本文导语: 我在命令窗口输入如下命名执行某个程序 cd /root/fdr-2.83-linux-academic export FDRHOME=/root/fdr-2.83-linux-academic cd bin ./fdr2 batch /root/windows/test.csp 我想做个程序自动执行上面的命令,而不是通过手动输入命令,调查了一下好...
我在命令窗口输入如下命名执行某个程序
cd /root/fdr-2.83-linux-academic
export FDRHOME=/root/fdr-2.83-linux-academic
cd bin
./fdr2 batch /root/windows/test.csp
我想做个程序自动执行上面的命令,而不是通过手动输入命令,调查了一下好像可以用system函数
test.c文件的内容
int main(){
int newret;
printf("Get the thread Id:%dn",getpid());
newret = system("cd /root/fdr-2.83-linux-academic");
printf("newret Id1:%dn",newret);
newret = system("export FDRHOME=/root/fdr-2.83-linux-academic");
printf("newret Id2:%dn",newret);
newret = system("cd bin");
printf("newret Id3:%dn",newret);
newret = system("./fdr2 batch /root/windows/test.csp");
printf("newret Id4:%dn",newret);
return 0;
}
执行newret = system("cd bin")的时候出错,于是改成newret = system("cd /root/fdr-2.83-linux-academic");出错信息是 cd: bin:no such file or directory
但这样的话执行newret = system("./fdr2 batch /root/windows/test.csp")的时候出错了,错误信息是 sh ./fdr2: no such file or directory
我应该怎么做才能实现与手动输入命令一样的功能呢,用c程序不行的话又没有其他的方法
cd /root/fdr-2.83-linux-academic
export FDRHOME=/root/fdr-2.83-linux-academic
cd bin
./fdr2 batch /root/windows/test.csp
我想做个程序自动执行上面的命令,而不是通过手动输入命令,调查了一下好像可以用system函数
test.c文件的内容
int main(){
int newret;
printf("Get the thread Id:%dn",getpid());
newret = system("cd /root/fdr-2.83-linux-academic");
printf("newret Id1:%dn",newret);
newret = system("export FDRHOME=/root/fdr-2.83-linux-academic");
printf("newret Id2:%dn",newret);
newret = system("cd bin");
printf("newret Id3:%dn",newret);
newret = system("./fdr2 batch /root/windows/test.csp");
printf("newret Id4:%dn",newret);
return 0;
}
执行newret = system("cd bin")的时候出错,于是改成newret = system("cd /root/fdr-2.83-linux-academic");出错信息是 cd: bin:no such file or directory
但这样的话执行newret = system("./fdr2 batch /root/windows/test.csp")的时候出错了,错误信息是 sh ./fdr2: no such file or directory
我应该怎么做才能实现与手动输入命令一样的功能呢,用c程序不行的话又没有其他的方法
|
你可以将你的名令写入一个字符串,用;号分隔开来,然后直接调用system执行,这样做是可以的,比如:
strcpy( lrs_cmd, "cd bin; ./fdr2 batch /root/windows/test.csp");
system( lrs_cmd );
如果还有其他需要执行的命令,都一起在lrs_cmd里面定义,记住每个命令用;间隔,这样是没问题的
strcpy( lrs_cmd, "cd bin; ./fdr2 batch /root/windows/test.csp");
system( lrs_cmd );
如果还有其他需要执行的命令,都一起在lrs_cmd里面定义,记住每个命令用;间隔,这样是没问题的
|
newret = system("cd /root/fdr-2.83-linux-academic");
printf("newret Id1:%dn",newret);
像你这里这些cd 的操作,是不能改变当前进程的目录的,只作用在子进程,所以你的需求相当于没有实现。
printf("newret Id1:%dn",newret);
像你这里这些cd 的操作,是不能改变当前进程的目录的,只作用在子进程,所以你的需求相当于没有实现。
|
vim 个XX.sh
*******************************************
#!/bin/bash
cd /root/fdr-2.83-linux-academic
export FDRHOME=/root/fdr-2.83-linux-academic
cd bin
./fdr2 batch /root/windows/test.csp
******************************************
shell脚本内容
最后再 chmod +x XX.sh shell脚本就OK了
在你的函数里使用system("/物理路径/XX.sh");
如果想知道前面的 shell脚本是否执行成功可以FILE *result=popen("/物理路径/XX.sh || echo $?","r");
再用fread(buf,sizeof(char),sizeof(buf) result); 将结果读入buf中
int flag=atoi(buf);
如果是1表示失败,0表示成功。
*******************************************
#!/bin/bash
cd /root/fdr-2.83-linux-academic
export FDRHOME=/root/fdr-2.83-linux-academic
cd bin
./fdr2 batch /root/windows/test.csp
******************************************
shell脚本内容
最后再 chmod +x XX.sh shell脚本就OK了
在你的函数里使用system("/物理路径/XX.sh");
如果想知道前面的 shell脚本是否执行成功可以FILE *result=popen("/物理路径/XX.sh || echo $?","r");
再用fread(buf,sizeof(char),sizeof(buf) result); 将结果读入buf中
int flag=atoi(buf);
如果是1表示失败,0表示成功。