Будь умным!


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

I m the child ; printf

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

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

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

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

от 25%

Подписываем

договор

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

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

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. Depth look t cr mterils Iron Obviously the bulk of motor cr is mde from metls bsed on iron
3. 32821477 НАЦІОНАЛЬНЕ ЯК ЕКЗИСТЕНЦІЙНИЙ ПРОЕКТ І РУХ ЕКЗИСТЕНЦІЇ У ПРЕДМЕТНОМУ ПОЛІ ПРАЗЬКОЇ ПОЕТ
4. Программа преддипломной практики и методические указания по ее прохождению
5. Реферат- Дифтерия с учетом изменений сердечно-сосудистой системы
6. Level lnguges Который из этих языков языки высокого уровня C b Си c C
7. технических и исследовательских работ обеспечения жизнедеятельности и безопасности улучшение условий тр
8. режим труда и отдыха понятия и виды Режимы труда и отдыха ~ это регламентированная п
9. С новым годом праздник микрорайона.html
10. Бессмертные исповеди
11. Тема покорения американского Дикого Запада как в общеисторическом контексте так и в контексте истории кинем
12. экономических преобразований повседневно заботятся о повышении эффективности своего законодательства
13. Реферат- Влияние спорта на сердечнососудистую систему
14. Курсовая работа по теме- ldquo;РЕКЛАМА И СОВРЕМЕННЫЙ БИЗНЕСrdquo; Студентка- Осипенко К.
15. Джон Одюбон
16. Статья- Конкурентоспособность предприятия напрямую зависит от охраны труда
17. Лабораторная работа 3
18. Выращивание картофеля
19. БЕЛГОРОДСКИЙ УНИВЕРСИТЕТ КООПЕРАЦИИ ЭКОНОМИКИ И ПРАВА О
20. Особенности маркетинговых стратегий зарубежных фирм в России