×

Предупреждение

JUser: :_load: Не удалось загрузить пользователя с ID: 393

IPC linux (Fedora 14) server.cpp

Пятница, Март 01 2013, 02:48 PM
1
Оффлайн
0
//============================================================================
// Name : vnsin.cpp
// Author : Ardatov V.I.
// Version :
// Copyright : http://www.avicorp.ru
// Description : Sever IPC in C++, Fedora, Ansi-style
//============================================================================



#include
#include
#include
#include

#include
#include


//структура очереди
#define MSGCMD 200
typedef struct my_msgbufer
{
long mtype;
struct{
char mcom[MSGCMD];
char mzn1[MSGCMD];
char mzn2[MSGCMD];
} info;

} message_buf;



message_buf cmyb;
message_buf smyb;

size_t cbuf_length;
size_t sbuf_length;

int cmsqid;
int smsqid;


// индекс очереди клиента
key_t ckey = 100;
// индекс очереди сервера
key_t skey = 200;


int cmsgflg = 0666;
int smsgflg = IPC_CREAT | 0666;




struct param
{int idd;
char *wn;
};


// создание очереди сообщений
void serv_crmes(key_t key)
{
smsqid = msgget(key,smsgflg);
if (smsqid < 0 )
{ perror(\"smsqid filed\");
exit(1);
}
}


// создание очереди для клиента
void cl_crmes(key_t key)
{
smsqid = msgget(key,cmsgflg);
if (smsqid < 0 )
{ perror(\"gsmsqid filed\");
exit(1);
}
}


// передача сообщений клиенту
void cl_send_mes(key_t key)
{

cbuf_length = sizeof(cmyb.info);

if (msgsnd(cmsqid,&cmyb,cbuf_length, IPC_NOWAIT) < 0)
{
perror(\"ctmsgsnd\");
}

}


void *sread(void *arg)
{
int ready = 0; int counter = 0;
serv_crmes(skey);
printf(\"сервер в ожидании !!! \\r\\n\");
while (ready == 0)
{

// пауза
sleep(1);
cl_crmes(ckey);
counter++;
if (counter == 100) {printf(\" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! даже уснул барсук !!!!!!!!!!!!!!!!!!!!!! \\r\\n\");counter =0;}
// если есть сообщения от клиента
if (msgrcv(smsqid,&smyb,MSGCMD+MSGCMD+MSGCMD,1,IPC_NOWAIT) > 0)
{
printf(\"сервер получил:команда %s\\n\", smyb.info.mcom);
printf(\"сервер получил:значение %s\\n\", smyb.info.mzn1);
printf(\"сервер получил:значение %s\\n\", smyb.info.mzn2);


// отрабатываем комманду STATUS
if (strcmp(smyb.info.mcom,\"STATUS\") == 0)
{

// пример статуса
}
// отрабатываем комманду STATUS

// отрабатываем команду TERMINATE
if (strcmp(smyb.info.mcom,\"TERMINATE\") == 0)
{

// !!!!!!!!!!!! Выход из программы !!!!!!!!!!!!!!!!!!!!!!
exit(1);
}

// отрабатываем комманду TERMINATE

}
else { printf(\"%d - (сервер) : все спят в лесу ...\\r\\n\",counter);}
}
}


int main(int argc, char** argv)
{

int result,result2;
pthread_t thread1, thread2;

struct param *p1 = new param;
p1->idd = 0;
p1->wn = (char*)\"0\";

// поток сервера
result = pthread_create(&thread1, NULL ,sread , p1);

for(;;)
{

// бесконечный цикл
sleep(0.1);
}
return 0;
}
Разработка программ на заказ (Windows+CE+Mobile+Phone,Linux, ARM), Embarcadero Rad Studio, Visual Studio, Eclipse!
Ваш ответ

Облако тегов

Авторизация

Scroll to top