ioctl para bloquear la operación

Estoy usando la función ioctl para acceder a framebuffer
El problema es que para cada fotogtwig, estoy escribiendo framebuffer tres veces
Por ejemplo, cada cuadro, primero lleno el color Rojo, hago algunos cálculos, lleno el Verde, luego hago otro cálculo, luego el Azul.
En otras palabras, cada cuadro, tengo tres capas, Rojo como fondo, Verde y Azul como parte superior. Por lo tanto, Rojo y Verde es invisible y todo lo que puedo ver es el Azul.
Ahora, mi pregunta es que cuando uso ioctl call, parece que no puede reconocer el rojo y el verde, pero solo el azul.
Para cada cuadro, hice algo como:

Red(); //Frame buffer will be all Red getFrameBuffer(); // ioctl call Green(); Blue(); 

Y mi getFrameBuffer () es algo como:

 int fd = open("/dev/fb0",O_RDWR); if (fd == -1) printf("Could not open framebuffer\n"); struct fb_var_screeninfo screen_info; struct fb_fix_screeninfo fixed_info; if (ioctl(fd, FBIOGET_FSCREENINFO, &fixed_info)) printf("Error reading fixed information.\n"); if (ioctl(fd, FBIOGET_VSCREENINFO, &screen_info)) printf("Could not read variable screen info.\n"); size_t screensize = fixed_info.line_length*screen_info.yres; unsigned char *fbp = (unsigned char *)mmap(0, screensize, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); if ((int)fbp == -1) printf("Cannot mapped\n"); munmap(fbp,screensize); 

Hasta ahora, cuando llamo a getFrameBuffer (), devuelve todo el color azul. ¿Hay alguna forma de bloquear la escritura del framebuffer o algo así para que cuando llame a getFrameBuffer (), obtenga el color rojo?