hola muchas gracias eferion.
Imagino que el socket será TCP. El caso es que el socket deberías leerlo con "read", no con "fread". Además, hacer "fseek" sobre el socket no parece demasiado recomendable, ya que cuando tu lees datos de un socket el sistema borra el contenido ya leído para hacer hueco.
Sí el socket es TCP, el fread es porque estoy mirando la variable que cambio desde el otro proceso, por eso lo hice con ficheros, creo este fichero antes de crear el fork y así ambos procesos tienen la dirección del fichero y puedo modificar el valor y los dos procesos leen dicha modificacion. Con esto salgo del while y ahi si uso el read para el socket.
No he programado aún una Raspberry, pero ese es el funcionamiento esperado en PCs.
Es lo mismo lo único es que programas con una maquina con pocos recursos y velocidad de CPU limitada
PD.: La lectura "read" es bloqueante salvo que en el socket se indique lo contrario... y esa espera no debería consumir CPU.
Sí, muchas gracias por la aclaración, se que no debería consumir, pero el read si llego al read y no he hechola peticion de datos por dicho socket se queda bloqueado dependiendo del valor, en mi caso, se quedaria 5microsegundos:
struct timeval ts;
ts.tv_sec = 0;
ts.tv_usec = 5;
Sí aquí consumirá CPU también, pero en este punto lo que pretendemos es que el programa sea lo más rápido posible.
por eso necesito algo para detener el programa y que al cambiar algo desde el otro proceso continúe.
he probado con threads también, pero e sucede lo mismo.
Los problemas son sobretodo es conseguir detener los procesos que se estan ejecutando sin que de consumo de CPU se dispare al 90% - 100% y luego ver como sincronizo todo, aunque la sincronización me parece un tema menos complicado.
Muchas gracias de nuevo, y espero haber aclarado un poco más mi problema.