Pagini recente » Cod sursa (job #1653032) | Istoria paginii runda/sim10_2 | Cod sursa (job #1491103) | Istoria paginii moisil-2017/clasament/10 | Cod sursa (job #2053939)
#include <sys/types.h>
#include<stdio.h>
#include<unistd.h>
#include<sys/wait.h>
#include<stdlib.h>
#include<errno.h>
#include<sys/mman.h>
#include<fcntl.h>
#include<sys/stat.h>
int main()
{
int n;
printf("Numarul de elemente: ");
scanf("%d", &n);
printf("\nElementele: ");
char shm_name[]="myshm";
int shm_fd;
size_t shm_size=n*1000;
if(ftruncate(shm_fd, shm_size) ==-1)
{
perror(NULL);
shm_unlink(shm_name);
return errno;
}
shm_fd=shm_open(shm_name, O_CREAT|O_RDWR, S_IRUSR|S_IWUSR);
if(shm_fd<0)
{
perror(NULL);
return errno;
}
int *shm_ptr=mmap(0, shm_size, PROT_READ, MAP_SHARED, shm_fd, 0);
if(shm_ptr==MAP_FAILED)
{
perror(NULL);
shm_unlink(shm_name);
return errno;
}
int i=0; int *v;
v=(int *)malloc(n*sizeof(int));
for(i=0;i<n;i++)
{
int a;
scanf("%d", &a);
v[i]=a;
}
for(i=0;i<n;++i)
{
pid_t pid=fork();
if(pid<0) return errno;
else
if(pid==0)
{
int *shm_ptrc=mmap(0,1000, PROT_WRITE, MAP_SHARED, shm_fd,i*1000);
if(shm_ptrc==MAP_FAILED)
{
perror(NULL);
shm_unlink(shm_name);
return errno;
}
int q;
q=v[i];
printf("%d: ",q);
while(q>1)
{
printf("%d ",q);
if(q%2==0)
q=q/2;
else
q=q*3+1;
}
printf("1 \n");
perror(NULL);
exit(0);
}
}
for(i=0;i<n;++i)
wait(NULL);
return 0;
}