all im getting thus far is error 218. what m i missin !
#include <iostream>
#include <string>
#include <unistd.h>
#include <sys/wait.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#define MAX_SEQUENCE 10
typedef struct {
long fib_sequence [MAX_SEQUENCE];
int sequence_size;
} shared_data;
using namespace std;
long fib( unsigned long n )
{
if( n <= 1 )
{
return 1;
}
else
{
return fib(n-1)+fib(n-2);
}
}
void printFib( shared_data * me , unsigned long t )
{
int ct = 0;
me->fib_sequence[ct] = 0;
for( unsigned long i = 0; i <= t ; i++ )
{
ct++;
me->fib_sequence[ct] = fib( i );
}
}
int main(int argc, char** argv)
{
pid_t pID,wpi;
int status,seg_id;
shared_data * shared_mem;
int vic = atol(argv[1]);
if( (vic < 0) || (vic > MAX_SEQUENCE) )
{
cout<<"Number Error" <<endl;
exit(1);
}
seg_id = shmget(IPC_PRIVATE,sizeof(shared_data), 0644 | IPC_CREAT );
shared_mem = ( shared_data * ) shmat( seg_id , NULL , 0 );
shared_mem->sequence_size = vic;
pID = fork();
if( pID == 0 )
{
printFib( shared_mem , vic);
}
else
{
wpi = waitpid( pID,&status,WNOHANG);
if( !WIFEXITED(status) )
{
cerr << "waitpid() exited with an error: Status= "
<< WEXITSTATUS(status) << endl;
}
else if( WIFSIGNALED(status) )
{
cerr << "waitpid() exited due to a signal: "
<< WTERMSIG(status) << endl;
}
else
{
cout << shared_mem->fib_sequence <<endl;
shmdt(shared_mem);
shmctl(seg_id,IPC_RMID,NULL);
}
}
return 0;
}


Sign In
Create Account

Back to top









