【发布时间】:2024-06-12 02:35:02
【问题描述】:
我正在编写一个 Linux 发行版 C 程序。当守护进程从客户端读取一条消息时,它会派生一个子进程,然后将一个“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”总是返回路径“/”。
你能告诉我如何完成我的程序吗?
【问题讨论】:
标签: linux process clearcase daemon