J
jake
Hi!
I hope there is someone who can help me! I'm not so familiar with C and I
desperatly nead someone to comment this code. With as many details as
possible please.
Thanks!!
#include<stdio.h>
#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/shm.h>
#define SHMSIZE 128
#define SHM_R 0400
#define SHM_W 0200
void
main(argc, argv)
char *argv[];
{
struct shm_struct {
int tecken;
int empty;
} *shmp;
char *addr = NULL;
int pid, i, var1, var2, shmid;
struct shmid_ds *shm_buf;
shmid = shmget(IPC_PRIVATE, SHMSIZE,
IPC_CREAT | SHM_R | SHM_W );
shmp = (struct shm_struct *) shmat(shmid, addr, 0);
shmp->empty = 0; var1 = 0; var2 = 0;
pid = fork();
if (pid != 0)
{
/* here's daddy */
while (var1 < 100)
{
/* write to shmem */
var1++;
while (shmp->empty == 1);
shmp->tecken = var1;
shmp->empty = 1;
}
shmdt(addr);
shmctl(shmid, IPC_RMID, shm_buf);
}
else
{
/* here's the child */
while (var2 < 100)
{
/* read from shmem */
while (shmp->empty == 0);
var2 = shmp->tecken;
shmp->empty = 0;
printf("%d\n", var2);
}
shmdt(addr);
shmctl(shmid, IPC_RMID, shm_buf);
}
}
I hope there is someone who can help me! I'm not so familiar with C and I
desperatly nead someone to comment this code. With as many details as
possible please.
Thanks!!
#include<stdio.h>
#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/shm.h>
#define SHMSIZE 128
#define SHM_R 0400
#define SHM_W 0200
void
main(argc, argv)
char *argv[];
{
struct shm_struct {
int tecken;
int empty;
} *shmp;
char *addr = NULL;
int pid, i, var1, var2, shmid;
struct shmid_ds *shm_buf;
shmid = shmget(IPC_PRIVATE, SHMSIZE,
IPC_CREAT | SHM_R | SHM_W );
shmp = (struct shm_struct *) shmat(shmid, addr, 0);
shmp->empty = 0; var1 = 0; var2 = 0;
pid = fork();
if (pid != 0)
{
/* here's daddy */
while (var1 < 100)
{
/* write to shmem */
var1++;
while (shmp->empty == 1);
shmp->tecken = var1;
shmp->empty = 1;
}
shmdt(addr);
shmctl(shmid, IPC_RMID, shm_buf);
}
else
{
/* here's the child */
while (var2 < 100)
{
/* read from shmem */
while (shmp->empty == 0);
var2 = shmp->tecken;
shmp->empty = 0;
printf("%d\n", var2);
}
shmdt(addr);
shmctl(shmid, IPC_RMID, shm_buf);
}
}