我正在编写一个Linux发行版C程序。当守护进程从客户端读取MSG时,它将分叉子进程,然后将“NFS”目录挂载到本地主机并在此NFS目录上执行计算任务。
然而,这是NFS是IBM ClearCase动态视图,它被称为“MVFS”而不是“NFS”
因此,我必须执行“cleartool setview xxyyzz
”来安装此视图
但我尝试了几种方法,例如fork() + execvp
,system(shell)
,但从未成功过
下面是代码和shell:
void my_system();
int main(int argc, char** argv)
{
pid_t pid=fork();
if(pid!=0) exit(0);
if(setsid()==-1)
{
printf("setsid failed.");
exit(-1);
}
umask(0);
chdir("/tmp");
int i;
for(i=0;i<3;i++)
close(i);
FILE* logfd=fopen("/tmp/ccdcc.log","a+");
dup2(fileno(logfd),STDOUT_FILENO);
dup2(fileno(logfd),STDERR_FILENO);
fclose(logfd);
my_system(); //method1
system("/tmp/ccdccshell"); //method2
sleep(SEVERALTIME);
}
void my_system()
{
pid_t pid=fork();
if(pid!=0) return;
char *arg1[]={"cleartool","setview","zzzzzz"};
char *arg2[]={"cd","/proj/layer/mak"};
char *arg3[]={"mycmd"};
execvp("cleartool",arg1);
execvp("cd",arg2);
execvp("mycmd",NULL);
}
xxx@yyy> cat /tmp/ccdccshell
#!/bin/sh
#this command will mount a dynamic view and source some profile.
cleartool setview zzzzzz
#this path is under the mounted path
cd /proj/layer/mak
#to test where we are
pwd
#call my prog.
mycmd
我每次都失败了“cleartool....
”。没有安装视图。
“pwd
”始终返回“/
”路径。
你能告诉我如何完成我的课程吗?
答案 0 :(得分:0)
请勿使用cleartool setview
:spawns a subshell,它不会从您的同一位看到。
/view/myDynView
# under which you would see:
/view/myDynView/vobs/MyVob
您需要的只是view to be started。