} Message;
int main(){
Message msg_rcv; Message msg_snd;
key_t key; int length,n;
if ((key = ftok("test.txt", 'A'))<0) НЕ ПОЛУЧИЛ КЛЮЧА
MessageNum = msgget(key, 0666 | IPC_CREAT);
if ( MessageNum < 0 ) НЕ СОЗДАЛ ОЧЕРЕДЬ
sprintf(msg_snd.text, "TEXT FROM SERVER");
while (1)
{
int numbytes=msgrcv(MessageNum, &msg_rcv, sizeof(msg_rcv), msg_rcv.type, 0);
if (numbytes>0) {
printf("recieved message: %s\n", msg_rcv.text);
printf("sending message: %s\n", msg_snd.text);
if (msgsnd(MessageNum, &msg_snd, sizeof(msg_snd), 0)) ОШИБКА ПОСЫЛКИ
}
else if (numbytes==-1) ОШИБКА ПРИЕМА
}
int main(void)
{
Msg msg_rcv; Msg msg_snd;
int msgid; key_t key;
int numbytes = 0;
key = ftok("test.txt", 'A');
msgid = msgget(key, 0);
sprintf(msg_snd.mtext, "Message from client");
printf("Sending message: \"%s\".\n", msg_snd.mtext);
if (msgsnd(msgid, &msg_snd, sizeof(msg_snd), 0)) ОШИБКА ПОСЫЛКИ
while (numbytes==0){
numbytes=msgrcv(msgid, &msg_rcv, sizeof(msg_rcv), msg_rcv.mtype, 0);
if (numbytes<0) ОШИБКА НАДО ВЫХОДИТЬ
}
printf("CLIENT: Received message: \"%s\".\n", msg_rcv.mtext);
}
#include <stdio.h> <signal.h> <unistd.h> <sys/types.h> <sys/ipc.h> <sys/sem.h> <sys/shm.h> <error.h> "shmem.h"
Message* msgptr;
int shmid, semid;
int main(void)
{
key_t key;
signal(SIGINT, hndlr);
if((key = ftok(FileName, ProjectID)) < 0) ОШИБКАПОЛУЧЕНИЯКЛЮЧА
if((shmid=shmget(key,sizeof(Message),PERM|IPC_CREAT))<0) НЕДАЛИ
if((msgptr = (Message*)shmat(shmid, 0, 0)) < 0) НЕПОДКЛЮЧИЛИ
if((semid = semget(key, 5, PERM | IPC_CREAT)) < 0) НЕПОЛУЧИЛИСЕМАФ
while(1){
if(semop(semid, &WaitClient[0], 1) < 0)
printf("error occured while waiting process semaphore\n");
printf("Server gained access to shared memory.\n"
"It contains the folowwing data:\n-----%s", msgptr->buff);
sleep(2);
sprintf(msgptr->buff,"Message from server\n",);
semop(semid, &EnableClient[0], 2);
}
int main(int argc, char* argv[]){
Message* msgptr; key_t key;
int shmid, semid; char Name[256];
if (argc>1) strncpy(Name,argv[1],255);
if((key = ftok(FileName, ProjectID)) < 0) НЕДАЛИКЛЮЧ
if((shmid = shmget(key, sizeof(Message), 0)) < 0) НЕПАМЯТИ
if((msgptr = (Message*)shmat(shmid, 0, 0)) < 0) НЕДАЛИПОДКЛЮИТЬ
if((semid = semget(key, 2, PERM)) < 0) НЕДАЛИСЕМАФОРОВ
semop(semid, &WaitOtherClients[0],2);
sprintf(msgptr->buff,"Message from client with name %s\n",Name);
semop(semid,&EnableServer[0],1);
semop(semid,&WaitServer[0],1);
printf("%s has read the following \n-----%s", Name,msgptr->buff);
if(shmdt(msgptr) < 0) НЕ ОТСОЕДИНИЛАСЬ
semop(semid,&EnableOtherClients[0],1);
}
#define MAXBUFF 80
#define PERM 0666
const char * FileName = "test.txt";
const char ProjectID = 'A';
typedef struct mem
{
int segment;
char buff[MAXBUFF];
}Message;
static struct sembuf mem_lock[2] = {0, 0, 0, 0, 1, 0};
static struct sembuf mem_unlock[1] = {0, -1, 0};
static struct sembuf EnableServer[1] = {2,2,0};
static struct sembuf WaitServer[1] = {2,0,0};
static struct sembuf WaitClient[1] = {2,-1,0};
static struct sembuf EnableClient[1] = {2,-1,0};
ОТЕЦ
#include <stdio.h>
int main (int argc, char * argv[])
{
int pid,ppid,status;
pid = getpid(); ppid = getppid();
printf("FATHER PARAM: pid=%i ppid=%i\n",pid,ppid);
if (fork()==0)
execl ("son1.out","son1.out",NULL);
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.