linux 下的c语言编程,该怎么解决
linux 下的c语言编程
输入文件的路径(用户自己定义),如何实现此功能的调用在c语言中,类似于任务管理器中输入创建新任务的功能,如何通过c代码实现自主控制。求大神指点一二,最好能附代码。。。。纠结死了。这个问题。。。。。
------解决思路----------------------
fork + exec 就可以了啊
------解决思路----------------------
http://blog.chinaunix.net/uid-21411227-id-1826717.html
http://www.cnblogs.com/hnrainll/archive/2011/07/23/2114854.html
http://blog.****.net/hustspy1990/article/details/7448242
------解决思路----------------------
一定是代码写的不对,就是 fork+exec,没什么复杂的
------解决思路----------------------
没什么不好使的,这东西很简单,就那么几个参数而已,可能你对参数的理解有偏差
execl("/bin/echo", "echo", "executed by execl", NULL)
execl("/bin/ls", "ls", "/azuo", "-la", (char *)0 )
诸如此类……
------解决思路----------------------
看这帖子很久没结感觉也是............
不说废话了,我自己弄了一个给LZ看下,不过到现在我还是不明白LZ说的文件时二进制文件,还是shell脚本文件,所以我写了一个能运行二进制文件的程序,不过它还是可以执行shell的命令的,下面是代码
//task.c
//实现运行指定任务的程序
#include <stdio.h>
#include <unistd.h>
#include <string.h>
int is_shell(char *c)
{
int i;
for(i=0;c[i];i++)
if(c[i]=='/') return 0;
return 1;
}
int
main(int argc,char* argv[])
{
char **arg;
int i;
int start=is_shell(argv[1]);
if(argc==2 && !start)
{
execvp(argv[1],NULL);
return 0;
}
else
arg = (char **) malloc((argc-2+start)*sizeof(char*));
if(start)
{
arg[0] = (char *) malloc(strlen(argv[1])+1);
strcpy(arg[0],argv[1]);
}
for(i=1;i<argc-1;i++)
{
arg[start+i-1] = (char *) malloc(strlen(argv[i+1])+1);
strcpy(arg[start+i-1],argv[i+1]);
}
arg[start+argc-2]=NULL;
execvp(argv[1],arg);
return 0;
}
//test2.c
//测试上面程序功能的程序,作用就是把接收到的参数打印出来
#include <stdio.h>
int
main(int argc,char* argv[])
{
int i;
for(i=0;i<argc;i++)
printf("%s\n",argv[i]);
return 0;
}
下面是运行结果

要是想运行shell脚本也不难,改下就好,还是不会我可以再改下
输入文件的路径(用户自己定义),如何实现此功能的调用在c语言中,类似于任务管理器中输入创建新任务的功能,如何通过c代码实现自主控制。求大神指点一二,最好能附代码。。。。纠结死了。这个问题。。。。。
------解决思路----------------------
fork + exec 就可以了啊
------解决思路----------------------
http://blog.chinaunix.net/uid-21411227-id-1826717.html
http://www.cnblogs.com/hnrainll/archive/2011/07/23/2114854.html
http://blog.****.net/hustspy1990/article/details/7448242
------解决思路----------------------
一定是代码写的不对,就是 fork+exec,没什么复杂的
------解决思路----------------------
没什么不好使的,这东西很简单,就那么几个参数而已,可能你对参数的理解有偏差
execl("/bin/echo", "echo", "executed by execl", NULL)
execl("/bin/ls", "ls", "/azuo", "-la", (char *)0 )
诸如此类……
------解决思路----------------------
看这帖子很久没结感觉也是............
不说废话了,我自己弄了一个给LZ看下,不过到现在我还是不明白LZ说的文件时二进制文件,还是shell脚本文件,所以我写了一个能运行二进制文件的程序,不过它还是可以执行shell的命令的,下面是代码
//task.c
//实现运行指定任务的程序
#include <stdio.h>
#include <unistd.h>
#include <string.h>
int is_shell(char *c)
{
int i;
for(i=0;c[i];i++)
if(c[i]=='/') return 0;
return 1;
}
int
main(int argc,char* argv[])
{
char **arg;
int i;
int start=is_shell(argv[1]);
if(argc==2 && !start)
{
execvp(argv[1],NULL);
return 0;
}
else
arg = (char **) malloc((argc-2+start)*sizeof(char*));
if(start)
{
arg[0] = (char *) malloc(strlen(argv[1])+1);
strcpy(arg[0],argv[1]);
}
for(i=1;i<argc-1;i++)
{
arg[start+i-1] = (char *) malloc(strlen(argv[i+1])+1);
strcpy(arg[start+i-1],argv[i+1]);
}
arg[start+argc-2]=NULL;
execvp(argv[1],arg);
return 0;
}
//test2.c
//测试上面程序功能的程序,作用就是把接收到的参数打印出来
#include <stdio.h>
int
main(int argc,char* argv[])
{
int i;
for(i=0;i<argc;i++)
printf("%s\n",argv[i]);
return 0;
}
下面是运行结果
要是想运行shell脚本也不难,改下就好,还是不会我可以再改下