[ create a new paste ] login | about

Link: http://codepad.org/Hblpu6rz    [ raw code | output | fork ]

C++, pasted on Sep 19:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <sys/sem.h>
#include <unistd.h>

// Структура для сообщения
struct Message {
    char data[4096]; // Максимальная длина сообщения
};

int main() {
    // Получение идентификатора разделяемой области памяти
    int shm_id = shmget(IPC_PRIVATE, sizeof(struct Message), IPC_CREAT | 0666);
    if (shm_id == -1) {
        perror("shmget");
        exit(1);
    }

    // Получение указателя на разделяемую область памяти
    struct Message *shm_msg = (struct Message *)shmat(shm_id, NULL, 0);
    if ((int)shm_msg == -1) {
        perror("shmat");
        exit(1);
    }

    // Получение идентификатора семафора
    int sem_id = semget(IPC_PRIVATE, 1, IPC_CREAT | 0666);
    if (sem_id == -1) {
        perror("semget");
        exit(1);
    }

    // Инициализация семафора
    union semun {
        int val;
        struct semid_ds *buf;
        ushort *array;
    } sem_init;
    sem_init.val = 0; // Изначально семафор заблокирован
    if (semctl(sem_id, 0, SETVAL, sem_init) == -1) {
        perror("semctl");
        exit(1);
    }

    // Ожидание ответа от сервера
    struct sembuf wait_op = {0, -1, 0}; // Заблокировать семафор клиента 2
    if (semop(sem_id, &wait_op, 1) == -1) {
        perror("semop");
        exit(1);
    }

    // Вывод ответа от сервера
    printf("Клиент 2 получил ответ от сервера:\n%s\n", shm_msg->data);

    // Отключение разделяемой области памяти
    shmdt(shm_msg);

    return 0;
}


Output:
1
2
In file included from t.cpp:6:
Line 19: error: stddef.h: No such file or directory


Create a new paste based on this one


Comments: