Witam. Napisałem program rozwiązujący problem klient-serwer. Działa niemal wszystko, wyjątkiem jest jedna funkcja (służąca do usuwania kolejki). Wewnątrz niej zawarłem funkcję msgctl
, która obecnie zwraca błąd Invalid argument
. Proszę o podpowiedź, gdzie może tkwić błąd.
Kod funkcji:
void deleteQ(int qid, Message* msg)
{
int ctl=msgctl(qid, IPC_RMID, msg);
if(ctl==-1)
{
perror("Blad funkcji deleteQ() - usuniecie kolejki nie powiodlo sie\n");
exit(5);
}
W ten sposób jej używam (kombinacja ctrl+c):
signal(SIGINT, &deleteQ);
Message jest strukturą:
typedef struct
{
long addressee; //adresat
long sender; //nadawca
char text[M_SIZE]; //treść
} Message;
EDIT: Wpisałem NULL w miejsce struktury w wywołaniu funkcji smgctl. W deklaracji deleteQ zostawiłem tylko qid (id kolejki). W wywołaniu funkcji signal() wywaliłem ampersand. Niestety, błąd wciąż występuje.