私は全二重パイプを作ろうとしています、それは私の家の仕事の一部です(私は前もって言います)。宿題の範囲はこのパイプよりもはるかに大きいので、作業を続けることができるようにそれを行う必要があります。ここに重要なコードのみを貼り付けます。コード全体は貼り付けませんでした。
#define READ_END 0
#define WRITE_END 1
int main()
{
Folder* curFolder = (Folder*) malloc (sizeof(Folder));
assert(curFolder != NULL);
initFolder(curFolder, NULL, "root");
makeDir(curFolder, "test");
return 0;
}
Pipe* createPipe()
{
Pipe* p = (Pipe*) malloc (sizeof(Pipe));
assert(p != NULL);
pipe( p->readPipe );
pipe( p->writePipe );
//close( p->readPipe[WRITE_END] );
//close( p->writePipe[READ_END] );
return p;
}
char* readMsg(FolderRef* folderHandle, char* buffer)
{
read(folderHandle->pipe->readPipe[READ_END], buffer, PIPE_BUF);
return buffer;
}
void sendMsg(FolderRef* folderHandle, char* msg)
{
write(folderHandle->pipe->writePipe[WRITE_END], msg, strlen(msg) + 1);
}
void makeDir(Folder* curFolder, char* name)
{
pid_t childId;
char msg[PIPE_BUF];
Pipe* con = createPipe();
childId = fork();
switch ( childId )
{
case -1: // error occurred
{
printf( "Error at fork in function makeDir.\n" );
exit( 0 );
}
case 0: // son process
{
initFolder( curFolder, getFolderHandle( getppid(), con, "" ), name );
readMsg(curFolder->parentFolder, msg);
printf("%s\n", msg);
sendMsg(curFolder->parentFolder, "roger roger");
break;
}
default:
{
insertFolder(&curFolder->folderList, getFolderHandle(childId, con, name));
sendMsg(curFolder->folderList->folder, "test");
readMsg(curFolder->folderList->folder, msg);
printf("%s\n", msg);
break;
}
}
}
結果(今のところ)は画面に出力されます:test roger roger
しかし、私はそれを成し遂げることができません。細部が欠けているようです。