Se cuenta con varias posibilidades concretas de comunicación IPC: sockets, pipes, archivos. En este caso se opta por la comunicación mediante archivos FIFO (es decir, implementando el concepto de pipes mediante archivos virtuales) donde un programa lee del archivo mientras el otro escribe en el mismo.
Para analizar la viabilidad se decide realizar un programa simple donde dos procesos se comuniquen mutuamente. En este caso contamos con un proceso que lee e imprime los valores de actuación a utilizar (hecho en Fortran 90) y otro proceso que genera y escribe los mismos (C++).
Lector (Fortran 90) - lector.f90
program readcsv implicit none call readAndPrint() end program readcsv subroutine readAndPrint() integer status double precision value open(unit=99, file="act1.csv", action="read") do read(99, *, IOSTAT=status) value if (status > 0) then !Error write (102,*) 'An error has been detected in the file' exit else if (status < 0) then !EOF exit else print *, 'Value:',value end if end do close(99) end subroutine
Escritor (C++) - escritor.cpp
#include <iostream> #include <fstream> #include <ctime> int main(int argc, char* argv[]) { std::ofstream arch("act1.csv", std::fstream::app); for (int i = 0; i < 2; ++i) { arch << 1.0 + i / 100.0 << std::endl; sleep(2); } return 0; }
Para ejecutar el programa es necesario abrir un archivo FIFO del sistema operativo. Esto es muy sencillo en sistemas Linux/Unix:
mkfifo act1.csv
La secuencia real de compilación y ejecución es la siguiente:
$ gfortran -o lector lector.f90 $ g++ -o escritor escritor.cpp $ mkfifo act1.csv $ ./lector & [1] 892
$ ./escritor
Value: 1.0000000000000000 Value: 1.0100000000000000 [1]+ Done ./lector