0

私が行っているこの割り当てをコンパイルしようとしていますが、修正方法がわからないエラーが発生しています。特に、コマンドライン引数は次のとおりです。

gcc HW3.c semaphore.o buffer.c -L. -lst -o test

問題は、semaphor.hファイルが私たちに与えられたので、クラスに本質的に間違っているものは何もないので、そこで不平を言うべきではないと思います。構造体エラーを調整する方法もわかりません。私は C に特に精通しているわけではありません。エラー リストは次のとおりです。

    In file included from buffer.c:11:
semaphore.h:4: error: expected specifier-qualifier-list before ‘st_cond_t’
In file included from buffer.h:2,
                 from buffer.c:12:
semaphore.h:4: error: expected specifier-qualifier-list before ‘st_cond_t’
semaphore.h:5: error: conflicting types for ‘semaphore’
semaphore.h:5: note: previous declaration of ‘semaphore’ was here
semaphore.h:7: error: conflicting types for ‘down’
semaphore.h:7: note: previous declaration of ‘down’ was here
semaphore.h:8: error: conflicting types for ‘up’
semaphore.h:8: note: previous declaration of ‘up’ was here
semaphore.h:9: error: conflicting types for ‘createSem’
semaphore.h:9: note: previous declaration of ‘createSem’ was here
buffer.c: In function ‘init_buffer’:
buffer.c:20: error: incompatible type for argument 1 of ‘createSem’
semaphore.h:9: note: expected ‘struct semaphore *’ but argument is of type ‘semaphore’
buffer.c:21: error: incompatible types when assigning to type ‘semaphore’ from type ‘void *’
buffer.c:23: error: incompatible type for argument 1 of ‘createSem’
semaphore.h:9: note: expected ‘struct semaphore *’ but argument is of type ‘semaphore’
buffer.c:24: error: incompatible types when assigning to type ‘semaphore’ from type ‘void *’
buffer.c: In function ‘c_deposit’:
buffer.c:38: error: incompatible type for argument 1 of ‘down’
semaphore.h:7: note: expected ‘struct semaphore *’ but argument is of type ‘semaphore’
buffer.c:41: error: incompatible type for argument 1 of ‘up’
semaphore.h:8: note: expected ‘struct semaphore *’ but argument is of type ‘semaphore’
buffer.c: In function ‘c_remove’:
buffer.c:46: error: incompatible type for argument 1 of ‘down’
semaphore.h:7: note: expected ‘struct semaphore *’ but argument is of type ‘semaphore’
buffer.c:49: error: incompatible type for argument 1 of ‘up’
semaphore.h:8: note: expected ‘struct semaphore *’ but argument is of type ‘semaphore’

buffer.c:

#include <stdio.h>
#include <stdlib.h>
#include "semaphore.h"
#include "buffer.h"

buffer *init_buffer(int size)
{

    buffer *new_Buffer;
    new_Buffer=malloc((sizeof(buffer)));

    createSem(new_Buffer->emptyBuffer, size);
    new_Buffer->emptyBuffer=malloc(sizeof(semaphore));

    createSem(new_Buffer->fullBuffer, 0);
    new_Buffer->fullBuffer=malloc(sizeof(semaphore));

    new_Buffer->chars=malloc(sizeof(char)*size);

    new_Buffer->size=size;

    new_Buffer->nextIn=0;
    new_Buffer->nextOut=0;

    return new_Buffer;
}

void c_deposit(buffer *buffer, char c)
{
    down(buffer->emptyBuffer);
    buffer->chars[buffer->nextIn]=c;
    buffer->nextIn=(buffer->nextIn+1)%buffer->size;
    up(buffer->fullBuffer);
}
int c_remove(buffer *buffer)
{
    int c;
    down(buffer->fullBuffer);
    c=buffer->chars[buffer->nextOut];
    buffer->nextOut=(buffer->nextOut+1)%buffer->size;
    up(buffer->emptyBuffer);
    return c;
}

buffer.h:

#include <stdio.h>
#include "semaphore.h"

typedef struct{
    semaphore emptyBuffer;
    semaphore fullBuffer;
    int nextIn;
    int nextOut;
    int size;
    char *chars;
}buffer;

void c_deposit(buffer *buffer, char c);
int c_remove(buffer *buffer);

buffer *init_buffer(int size);

適切な測定のために、semaphore.h もここにあります。

typedef struct
{
  int value;
  st_cond_t sem_queue;
} semaphore;

void down(semaphore *s);
void up(semaphore *s);
void createSem(semaphore *s, int value);
4

1 に答える 1