000
13.01.2009, 12:43 Uhr
~axel t
Gast
|
also hallo erst mal. ich möchte ein programm schreiben mit dem ich einen shared memory bereich erstelle. doch wenn ich mit read oder write darauf zugreifen will gibt dieser befehl -1 zurück und mit perror wird "operation not supported" geschrieben! warum wird das nicht ausgeführt?!
Code: |
//#include "3b.h"
#include <stdio.h> #include<stdlib.h> #include<dirent.h> #include<String.h> #include<time.h> #include<sys/stat.h> #include <unistd.h> #include <fcntl.h> #include<sys/types.h> #include <ctype.h> #include <math.h> #include <sys/mman.h> #include <sys/ipc.h> #include <sys/shm.h> int ctoi(char c){ char h[1]; h[0]=c; return atoi(h); } void itoa(int number,char* number_str){ sprintf(number_str, "%i", number); //return number_str; } void status(int* fd,char* s){ write(*fd,s,sizeof(s)); } struct Auftrag{ int empty; char s[30]; int cpid; int nummer; }; struct chain{ struct chain* next; struct chain* last; struct Auftrag a; }; struct SStatus{ char doing[30]; int pida; int nummera; int pid; int nummer; }; struct Client{ int pid; int alife; }; void getdown(int i){ printf("SIGTERM erhalten. beende mich...\n"); int ii=(shm_open("status.tmp",O_TRUNC,S_IRWXU)); status(&ii,"b"); sleep(10); printf("runtergefahren"); exit(0); }
void stochars(void* s,char* c,int size){ int i=0; printf("size:%i\n",size); for(i=0;i<size;i++){ *(c+i)= * (((char *) s)+i); printf("Q%iQ",i); } } void charstos(char * c,void * s,int size){ int i=0; for(i=0;i<size;i++){ printf("A%iA",i); *((char *)(s+i)) = *((char *)(void *)((c)+i)); } }
int ffwrite(void * v,int size,int count,int fd){ char c[size]; if(0>=memcpy(c,v,size-1)){ perror("FEHLER ffwrite memcpy"); } int r=write(fd,c,size); if(r<=0){ perror("ERROR ffwrite write"); printf("dats: fd %i c %s size%i",fd,c,size); } return r; }
int ffread(void * v,int size,int count,int fd) { char c[size]; int r=read(fd,c,sizeof(c)); memcpy(v,c,size-1); return r; }
int main(int argc,char *argv[]){ printf("bla\n"); extern int errno; struct Auftrag auftrag,altauftrag; int i=0; int t=0; int clientcounter=0; printf("max anzahl clients: int %i\n",sizeof(auftrag)); char max[10]; //scanf("%s",max); int clientids[atoi(max)]; char input[200]; int toserver; int toclient; int* ttoclient; int interface; printf("%i unlink\n",shm_unlink("/toclient.tmp")); shm_unlink("/interface.tmp"); int ts=mkfifo("toserver.tmp", S_IRWXU);perror("fehler1 "); errno=0; toserver=open("toserver.tmp",O_RDWR|O_TRUNC,S_IRWXU);perror("fehler2 "); errno=1; //pa=mmap(addr, len, prot, flags, fildes, off); int tckey=ftok("toserver.tmp",'A'); perror("LOWfehler "); int tcid=shmget(tckey,sizeof(auftrag),IPC_CREAT); perror("LOWfehler "); ttoclient=shmat(tcid,(void*)0,0); perror("LOWfehler "); //toclient= shm_open("/toclient.tmp",O_CREAT|O_RDWR,S_IRWXU);perror("fehler3 "); errno=0; //void* cptr=mmap(0,sizeof(int), PROT_WRITE,MAP_SHARED,toclient,0);perror("fehler4 "); errno=33; interface=shm_open("/interface.tmp",O_CREAT|O_RDWR ,S_IRWXU);perror("fehler5 "); errno=0; //memcpy(cptr,&i,sizeof(int)); printf("server%i client%i interface%i (%i)\n",toserver,toclient,interface,errno); perror("fehler "); i=getpid(); auftrag.empty=1; auftrag.nummer=1; strcpy(auftrag.s,"hallo klaptz?"); printf("noch\n"); //memcpy(max,&auftrag,sizeof(auftrag)-1); //exit(0);errno=0; //write(toserver,&auftrag,sizeof(auftrag)); if(memcpy(ttoclient,&auftrag,sizeof(auftrag)-1)<0) perror("ZZZwrite "); ffwrite(&auftrag,sizeof(auftrag),1,toserver); perror("Uwrite "); //ffwrite(&auftrag,sizeof(auftrag),1,toserver); signal(SIGTERM,getdown); i=getpid(); printf("%i bytes geschrieben\n", write(toserver,&(i),sizeof(int)-1)); perror("2write "); printf("%i bytes geschrieben\n", write(interface,&(i),sizeof(int)-1)); perror("2write "); printf("%i bytes geschrieben\n", write(toclient,&(i),sizeof(int)-1)); perror("2write ");
lseek(interface,0,SEEK_SET);perror("seek "); printf("initialisiert!\n"); exit(0); }
|
|