Linux 3.0: Ejecutar proceso hijo con stdin / stdout canalizado

En Linux 3.0 / C ++:

Me gustaría una función que haga lo siguiente:

string f(string s)
{
    string r = system("foo < s");
    return r;
}

Obviamente, lo anterior no funciona, pero se entiende la idea. Tengo una cadena s que me gustaría pasar como entrada estándar de la ejecución de un proceso secundario de la aplicación "foo", y luego me gustaría registrar su salida estándar en la cadena r y luego devolverla.

¿Qué combinación de syscalls de linux o funciones posix debo usar?

Respuestas a la pregunta(6)

Su respuesta a la pregunta