Hi guys, I am new to systems programming using C and on the Linux platform.i got a rather demoralizing problem, after developing my program over the weekend.
I was tasked to develop an application which instructed me to use small java programs within my C code to call the small GUI programs using exepl. I have managed to code most of the code execpt after clicking on the OptionDialog( also a java based GUI program) i could not return to my main Listbox(java based Listbox)and select other files. Below is a general algorithm of how i used the pipe,fork and exepl commands.
Aplogies if the code is too long or i hope some C systems programming expert could help me out. My guess is with the inner forks at processFileDesc_3 and processFileDesc_4.I have the full code and relevant java programs on hand.If anyone is interested in helping me out, drop me and email and i will send out the tar file.
Code:
main(int argc,char * argv[])
{
int processFileDesc_1[2];
int processFileDesc_3[2];
int processFileDesc_4[2];
pipe(processFileDesc_1);
if(fork () != 0 )
{
//**************************************************************************
// Start of parent process processFileDesc_1
//**************************************************************************
int processFileDesc_2[2];
pipe(processFileDesc_2);
if(fork()== 0)
{
//**********************************************************************
// Start of child process processFileDesc_2
//**********************************************************************
close(processFileDesc_2[1]);
dup2(processFileDesc_2[0],0);
close(processFileDesc_2[0]);
char inputFile[MAXPATHLEN];
while(scanf("%s",inputFile) > 0)
{ if(strstr(inputFile,".java")) // checks if the file is a java file
{
int processFileDesc_3[2];
int processFileDesc_4[2];
pipe(processFileDesc_3);
if (fork() == 0)
{
//****************************************************************
// start of child process processFileDesc_3
//****************************************************************
close(processFileDesc_3[1]);
dup2(processFileDesc_3[0],0);
close (processFileDesc_3[0]);
pipe(processFileDesc_4);
if(fork() == 0)
{
//**************************************************************
// start of child process processFileDesc_4
//**************************************************************
char userInput[20];
close(processFileDesc_4[1]);
dup2(processFileDesc_4[0],0);
close(processFileDesc_4[0]);
while(scanf("%s",userInput) > 0)
{
if(strstr(userInput,"Edit"))
{
if(fork() == 0)
{
printf("File to be opened is %s\n",inputFile);
execlp("gedit","gedit",inputFile, NULL);
}
}
else if(strstr(userInput,"Compile"))
{
printf("File to be compiled is %s\n",inputFile);
}
}//end if while
//**************************************************************
// End of child process processFileDesc_4
//**************************************************************
}//end if fork == 0 for processFileDesc_4
else
{
//**************************************************************
// Start of parent process processFileDesc_4
//**************************************************************
close(processFileDesc_4[0]);
dup2(processFileDesc_4[1],1);
close(processFileDesc_4[1]);
execlp("java","java","ButtonSelect","Please make a choice", NULL);
//**************************************************************
// End of parent process processFileDesc_4
//**************************************************************
}//end else fork ==0 for processFileDesc_4
//******************************************************************
// End of child process processFileDesc_3
//******************************************************************
}//end else fork ==0 for processFileDesc_3
else
{
//****************************************************************
// Start of parent process processFileDesc_3
//****************************************************************
close(processFileDesc_3[0]);
dup2(processFileDesc_3[1],1);
close(processFileDesc_3[1]);
execlp("echo","echo","-e","Edit\nCompile",NULL);
//****************************************************************
// End of parnent process processFileDesc_3
//****************************************************************
}//end else fork ==0 for processFileDesc_3
}//end else (strstr == java)
}//end while
}//end if
//************************************************************************
// End of child process processFileDesc_2
//************************************************************************
else
{
//**********************************************************************
// Start of parent process processFileDesc_2
//**********************************************************************
close(processFileDesc_2[0]);
dup2(processFileDesc_2[1],1);
close(processFileDesc_2[1]);
close (processFileDesc_1[1]);
dup2(processFileDesc_1[0],0);
close(processFileDesc_1[0]);
execlp("java","java","ListSelect","-persistent",NULL);
//**********************************************************************
// End of parent process processFileDesc_2
//**********************************************************************
}//end else
//**************************************************************************
// End of parent process processFileDesc_1
//**************************************************************************
}//end if
else
{
//**************************************************************************
// Start of child process processFileDesc_1
//**************************************************************************
printdir(toBeListed,processFileDesc_1[1]);
//**************************************************************************
// End of child process processFileDesc_1
//**************************************************************************
}//end else
}//end main