per ora vi assillo un po ...

allora sto scrivendo un software per il quale mi serve poter scrivere consumando al minimo il procio e quindi sfruttando al massimo il DMA e le relative accelerazioni MMX e CO ... di conseguenza dopo qualche oretta di ricerca mi pare di aver capito che mappando i file nella memoria virtuale e usando memcpy per copiarci i dati dentro dovrei ottenere maggiori performance, soprattutto tenendo conto che questo applicativo deve fare questa stessa operazione, tipo, per 1 mese di fila, 24 su 24 ore ^^

posto il pezzetto di codice che mi va in tilt

codice:
        if (video_read_frame_start(buffer) == TRUE)
        {
            char filename[30];
            sprintf(filename, "./shots/shot.%09i.yuyv", frames);
            
            int shot_fd = open(filename, O_RDWR | O_SYNC | O_CREAT | O_TRUNC);
            void* shot_mem_start = mmap(0, (*buffer).length, PROT_READ | PROT_WRITE, MAP_SHARED, shot_fd, (off_t)(*buffer).length);
            
            if (shot_mem_start == MAP_FAILED)
            {
                perror("mmap");
            }
            else
            {
                printf("  Frame[%i] Buffer[%i/%i]: start=%u, length=%i\n", frames, (*buffer).index, n_buffers - 1, (uint)buffers[(*buffer).index].start, (*buffer).length); fflush(stdout);
                memcpy(shot_mem_start, buffers[(*buffer).index].start, (*buffer).length);
                munmap(shot_mem_start, (*buffer).length);
            }
            close(shot_fd);
            
            frames++;
        }
        else
        {
            printf("  Frame[%i]: error while reading buffer", frames); fflush(stdout);
        }
        
        // End frame reading
        video_read_frame_end(buffer);
la riga in grassetto è quella che mi da errore per via SICURAMENTE dell'errato mmap eseguito sul file (se provo a fare un bel printf("%c", *(char *)shot_mem_start); mi da errore)

l'errore che ricevo è Bus Error ... ergo leggo oltre e mi da problemi

io credo che la cosa dipenda dal fatto che il file ha una dimensione di zero e col tutto che imposto la dimensione dell'mmap su quello che mi serve scriverci lui continua a tenere zero.

comunque l'mmap non fallisce

non essendo molto esperto di programmazione C e dato che per la prima volta mi sono avventurato con mmap/munmap/memcpy che fa potreste darlo un'aiutino?

ho già cercato estensivamente su internet, mi sono letto parecchio codice sorgente ed ovviamente le manpages sotto linux ... ma non sono riuscito a risolvere

cmq se non è che imposta la dimensione in memoria a zero forse è perché non rispetto la dimensione della pagina (e quindi la prende a male)

ho anche provato a fare prima mmap e poi a ridimensionare il tutto con mremap ma ottengo lo stesso identico errore

qualcuno di voi sa aiutarmi?