Спасибо, Джозеф, это работает хорошо!
Я пытался сделать это с сегментации памяти, и у меня та же проблема -_-
#include
#include
#include
#include
#include
#include
#include
#include
typedef struct {
int op1;
char op;
int op2;
}Operation;
int id;
void hand()
{
Operation *varOP = (Operation*) shmat(id, NULL, SHM_R);
shmdt((char *) varOP):
float result = 0;
switch (varOP->op) {
case '+':
result = (varOP->op1 + varOP->op2);
break;
case '-':
result = (varOP->op1 - varOP->op2);
break;
case '*':
result = (varOP->op1 * varOP->op2);
break;
case '/':
result = (varOP->op1 / varOP->op2);
break;
default:
result = 0;
break;
}
printf("%f",result);
exit(0);
}
int main () {
int p;
key_t cle;
p = fork();
cle = ftok(getenv("titi"), 'A');
id = shmget(cle, sizeof(Operation),0);
if(p == 0) // Si fils
{
signal(SIGUSR1,hand);
while (1);
exit(0);
}
if(p > 0)
{
Operation *varOP = (Operation*) shmat(id, NULL, SHM_W);
varOP->op = '+';
varOP->op1 = 2;
varOP->op2 = 3;
shmdt((char *) varOP);
kill(p, SIGUSR1);
wait(NULL);
}
return 0;
}