Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (GNU/Linux, *NIX, *BSD und Co) » warum funktioniert write nicht?

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
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);
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (GNU/Linux, *NIX, *BSD und Co) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: