Замена обработчика прерываний. Замена обработчика средствами DOS. Функция получения нулевого обработчика, страница 3

} 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);

}

10. Семафоры и разделяемая память

#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};

11. Зомби

ОТЕЦ

#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);