Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include<stdbool.h>
- #include<stdlib.h>
- #include<string.h>
- #include<semaphore.h>
- #include<unistd.h>
- #include<stdio.h>
- #include<stdlib.h>
- #include<sys/wait.h>
- #include<sys/mman.h>
- #include<stdbool.h>
- #include <sys/stat.h> /* For mode constants */
- #include <fcntl.h>
- #include<math.h>
- #define ARRAY_MAX (1024)
- #define MAX (256)
- #define osAssert(cond, userMsg) osErrorFatal(cond, userMsg,__FILE__,__LINE__)
- void osErrorFatal(bool cond, const char* userMsg, const char* file, const int line){
- if(!cond){
- perror(userMsg);
- fprintf(stderr,"File:%s:%d\n",file, line);
- exit(EXIT_FAILURE);
- }
- }
- typedef struct {
- sem_t inDataReady;
- float array[ARRAY_MAX];
- unsigned arrayLen;
- } OsInputData;
- void *getmem(char* name,int *size){
- int memfd=shm_open(name,O_RDWR,0600);
- osAssert(-1!=memfd,"smh");
- struct stat finfo;
- osAssert(-1!=fstat(memfd,&finfo),"stat");
- *size=finfo.st_size;
- void *addr;
- osAssert(MAP_FAILED!=(addr=(mmap(NULL,*size,PROT_READ | PROT_WRITE,MAP_SHARED,memfd,0))),"mmap");
- close(memfd);
- return addr;
- }
- int main(int argc,char** argv){
- osAssert(argc == 3,"args missing");
- int size;
- int size1;
- OsInputData* mem1=getmem(argv[1],&size);
- OsInputData* mem2=getmem(argv[2],&size1);
- mem2->arrayLen=0;
- osAssert(-1!=sem_wait(&(mem1->inDataReady)),"sem wait");
- for(int i=0;i<mem1->arrayLen;i++){
- int broj=mem1->array[i];
- int br=0;
- unsigned mask=1<<(sizeof(int)*8-1);
- while(mask){
- if(broj&mask)
- br++;
- }
- if(br>=4){
- mem2->array[mem2->arrayLen++]=mem1->array[i];
- }
- }
- osAssert(-1!=sem_post(&(mem2->inDataReady)),"sme post");
- osAssert(-1!=munmap(mem1,size),"mem1 munmap");
- osAssert(-1!=munmap(mem2,size1),",e,2 munmap");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement