У вас вопросы?
У нас ответы:) SamZan.net

I m the child ; printf

Работа добавлена на сайт samzan.net: 2015-07-05

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 12.5.2025

1)

#include <stdlib.h>

#include <stdio.h>

int main()

{

pid_t pid;

pid = fork();

if (pid == 0) {

printf ("i am the child\n");

printf ("my pid is %d\n" , getpid());

sleep(10);

exit(1);

             }

else {

printf("i am the parent\n");

printf("my pid is %d\n", getpid());

printf("my child's pid is %d\n", pid);

    }

}

2)

#include <stdlib.h>

#include <stdio.h>

#include <signal.h>

void sig_handl()

{

printf("fork you!\n");

exit (0);

}

int main()

{

pid_t pid;

pid = fork();

if (pid == 0) {

printf ("i am the child\n");

printf ("my pid is %d\n" , getpid());

signal(15,sig_handl);

sleep(10);

             }

else {

printf("i am the parent\n");

printf("my pid is %d\n", getpid());

printf("my child's pid is %d\n", pid);

sleep(5);

kill(pid, 15);     

}

}

Pipe1                                                                        pipe2

FIFO

Serv                                                                                      cl

MSG

Serv                                                                                                               cl

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <strings.h>
#define KEY 1174 // "
магическое" число 
#define MAXLEN 512
struct msg_t {
long mtype;
int snd_pid;
char body[MAXLEN];
};
int main() {
struct msg_t message;
int msgid;
char * response = "Ok!";
msgid = msgget(KEY, 0777 | IPC_CREAT); //
создаем очередь сообщений
msgrcv(msgid, &message, sizeof(message), 2, 0); //
ждем сообщение
printf("Client (pid = %i) sent: %s", message.snd_pid, message.body);
message.mtype = 1;
message.snd_pid = getpid();
strcpy(message.body, response);
msgsnd(msgid, &message, sizeof(message), 0); //
посылаем ответ
msgrcv(msgid, &message, sizeof(message), 2, 0); //
ждем подтверждения
msgctl(msgid, IPC_RMID, 0); //
удаляем очередь
return EXIT_SUCCESS;
}

Ниже приводится исходный текст программы-клиента

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <strings.h>
#define KEY 1174 // "
магическое" число
#define MAXLEN 512
struct msg_t {
long mtype;
int snd_pid;
char body[MAXLEN];
};
int main() {
int msgid;
int i;
struct msg_t message;
char buf[MAXLEN];
msgid = msgget(KEY, 0777); //
получаем идентификатор очереди
i = 0;
while ( (i < (MAXLEN - 1)) && ((message.body[i++] = getchar()) != '\n') );
message.body[i] = '\0';
message.mtype = 2;
message.snd_pid = getpid ();
msgsnd(msgid, &message, sizeof(message), 0); //
посылаем сообщение
msgrcv(msgid, &message, sizeof(message), 1, 0); //
ждем ответа
printf("Server (pid= %i) responded: %s\n", message.snd_pid, message.body);
message.mtype = 2;
msgsnd(msgid, &message, sizeof(message), 0); //
посылаем подтверждение
return EXIT_SUCCESS;
}

Shm

shm_open.c

#include <unistd.h>

#include <sys/types.h>

#include <sys/mman.h>

#include <fcntl.h>

#include <stdio.h>

#include <string.h>

#define SHARED_MEMORY_OBJECT_NAME "my_shared_memory"

#define SHARED_MEMORY_OBJECT_SIZE 50

#define SHM_CREATE 1

#define SHM_PRINT  3

#define SHM_CLOSE  4

void usage(const char * s) {

printf("Usage: %s <create|write|read|unlink> ['text']\n", s);

}

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

   int shm, len, cmd, mode = 0;

   char *addr;

   if ( argc < 2 ) {

       usage(argv[0]);

       return 1;

   }

   if ( (!strcmp(argv[1], "create") || !strcmp(argv[1], "write")) && (argc == 3) ) {

       len = strlen(argv[2]);

       len = (len<=SHARED_MEMORY_OBJECT_SIZE)?len:SHARED_MEMORY_OBJECT_SIZE;

       mode = O_CREAT;

       cmd = SHM_CREATE;

   } else if ( ! strcmp(argv[1], "print" ) ) {

       cmd = SHM_PRINT;

   } else if ( ! strcmp(argv[1], "unlink" ) ) {

       cmd = SHM_CLOSE;

   } else {

       usage(argv[0]);

       return 1;

   }

   if ( (shm = shm_open(SHARED_MEMORY_OBJECT_NAME, mode|O_RDWR, 0777)) == -1 ) {

       perror("shm_open");

       return 1;

   }

   if ( cmd == SHM_CREATE ) {

       if ( ftruncate(shm, SHARED_MEMORY_OBJECT_SIZE+1) == -1 ) {

           perror("ftruncate");

           return 1;

       }

   }

   addr = mmap(0, SHARED_MEMORY_OBJECT_SIZE+1, PROT_WRITE|PROT_READ, MAP_SHARED, shm, 0);

   if ( addr == (char*)-1 ) {

       perror("mmap");

       return 1;

   }

   switch ( cmd ) {

   case SHM_CREATE:

       memcpy(addr, argv[2], len);

       addr[len] = '\0';

       printf("Shared memory filled in. You may run '%s print' to see value.\n", argv[0]);

       break;

   case SHM_PRINT:

       printf("Got from shared memory: %s\n", addr);

       break;

   }

   munmap(addr, SHARED_MEMORY_OBJECT_SIZE);

   close(shm);

   if ( cmd == SHM_CLOSE ) {

       shm_unlink(SHARED_MEMORY_OBJECT_NAME);

   }

   return 0;

}

После создания объекта памяти мы установили нужный нам размер shared memory вызовом ftruncate(). Затем мы получили доступ к разделяемой памяти при помощи mmap(). (Вообще говоря, даже с помощью самого вызова mmap() можно создать разделяемую память. Но отличие вызова shm_open() в том, что память будет оставаться выделенной до момента удаления или перезагрузки компьютера.)

Компилировать код на этот раз нужно с опцией -lrt:

$ gcc -o shm_open -lrt shm_open.c


Смотрим что получилось:

$ ./shm_open create 'Hello, my shared memory!'

Shared memory filled in. You may run './shm_open print' to see value.

$ ./shm_open print

Got from shared memory: Hello, my shared memory!

$ ./shm_open create 'Hello!'

Shared memory filled in. You may run './shm_open print' to see value.

$ ./shm_open print

Got from shared memory: Hello!

$ ./shm_open close

$ ./shm_open print

shm_open: No such file or directory




1. ТЭД АЛКОГОЛЬНЫЕ НАПИТКИ Наименование Цена руб
2. ТЕМА ВАШЕГО БИЗНЕСА УПРАВЛЯЙТЕ ОПИРАЯСЬ НА ФАКТЫ Принятие делового решения требует большой подгот
3. правовых норм как общеобязательных правил поведения установленных государством адресованных определенно
4. 2013 г
5. а Для этого в конце сноски цитаты ставится цифра обозначающая порядковый номер сноски цитаты на данной ст
6. АДВОКАТУРА В РОССИИ ДО 1917 ГОДА
7. Имперские вопросы России
8. западе аппенинского полуострова в районе реки Тибр
9. Учет основных средств автотранспортного предприятия
10. Байкалсофт основана в 2004 году и на сегодняшний день является одним из лидеров в области разработки системн