-1

私は全二重パイプを作ろうとしています、それは私の家の仕事の一部です(私は前もって言います)。宿題の範囲はこのパイプよりもはるかに大きいので、作業を続けることができるようにそれを行う必要があります。ここに重要なコードのみを貼り付けます。コード全体は貼り付けませんでした。

#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

しかし、私はそれを成し遂げることができません。細部が欠けているようです。

4

1 に答える 1

3

書き込みを行うpipe->writePipe[WRITE_END]場合は、から読み取る必要がありますpipe->writePipe[READ_END]。読み込もうとしているようですpipe->readPipe[READ_END]が、これは別のパイプです。

于 2012-12-08T20:48:48.617 に答える