Me auto-respondo.
Lo que yo pedía es saber el código que hay que poner dentro de un programa para que estando este en ejecución saber el nombre del programa en ejecución. Dado que este código lo estoy metiendo en una librería creo que es interesante porque el nombre del programa es desconocido para el creador de la libreria.
Me autocontesto ya que he conseguido la solución:
void borrar_fichero()
{
if( remove( "temp.txt" ) == -1 )
{
perror( "¡¡ Error borrando el fichero !!" );
}
else
puts( "Fichero borrado correctamente." );
}
bool busqueda_fichero(string origen, string destino, int secuencia)
{
ifstream fin;
ofstream fout;
string s;
fout.open(destino.c_str());
fin.open(origen.c_str());
if (fin.fail()) // Problema al abrir el fichero con los datos
{
cout << "Fichero de origen no existe.\n";
return false;
}
getline(fin,s,' '); // Lee solo una palabra, no una linea
while (!fin.eof())
{
cout << s << endl;
if(atoi(s.c_str())==secuencia) // Convertir el string en int para poder compararlo
{
getline(fin,s,' ');
getline(fin,s,' ');
getline(fin,s,' ');
getline(fin,s,' ');
getline(fin,s,' ');
getline(fin,s,' ');
break;
}
getline(fin,s,' ');
}
s[0]=' ';
s[1]=' ';
fout << s;
fout.close();
fin.close();
borrar_fichero(); // Borramos fichero temporal
cout << "\nDone.\n";
return true;
}
void pasar_cadena(string mensaje)
{
int valor;
valor=getpid();
cout << "PID IMPORTANTE " << valor << endl;
system("ps >> temp.txt"); // Guardo resultado en un fichero temporal
bool test=busqueda_fichero("temp.txt", "destino.txt", valor);
//cout << mensaje << endl;
}
Por si ha alguien le sirve.
En la solución el nombre del programa lo escribe en un fichero llamado destino.txt. Es trivial sacarlo por pantalla.
Funciona en Linux y MAC.