tarea:
Me gustaría crear mi propia extensión de archivo para que cuando haga clic en un archivo de "punto" en particular, mi programa lo abra. Sin embargo, este programa que escribí, es solo un intermediario en el sentido de que realizará algún procesamiento, pero finalmente pasará ese archivo a otro programa para su procesamiento.
ejemplo:
Entonces, por ejemplo, todos los archivos de texto sin formato con la extensión .foo aparecerán como si se estuvieran abriendo con gedit . Pero lo que realmente sucede es que se están abriendo con uno de mis programas y, a su vez, mi programa pasa ese archivo a gedit .
mi programa c ++ para hacer esto, se ve así:
#include <string> #include <cstdlib> int main(int argc, char** argv) { //open file with gedit system(("(gedit " + std::string(argv[1]) + " > /dev/null &)").c_str()); //do other processing //... } Creo que cuando hace clic en un archivo y el sistema operativo le dice que se abra con cierto programa, ese nombre de archivo se pasa a un programa c ++ como el segundo argumento de ese programa (como índice 1, ya que el índice cero es el programa) nombre). El & es para que gedit se ejecute como un proceso en segundo plano, y el extra () alrededor de la declaración asegura que gedit no se cerrará cuando se cierre el shell principal.
problema:
Dicho todo esto, este programa funciona correctamente cuando tengo el archivo binario en una carpeta que aparece en mi variable $PATH y ejecuto el programa desde la línea de comando pasando el archivo como si se hubiera hecho clic en él. Sin embargo, no funciona cuando configuro el archivo para que se abra con el programa.
cómo he configurado la ejecución de un programa en el archivo, haga clic en:
Ejecuté el script que se encuentra en la respuesta de esta pregunta ,
y el programa SÍ aparece cuando hago Right Click->Properties->Open With
pero nada parece suceder cuando hago clic en el archivo. Incluso puse el programa en un bucle infinito y verifiqué si se estaba ejecutando como un proceso, pero no fue así. ¿Por qué no se llama al programa en absoluto? ¿O recibe una llamada y simplemente cierra de inmediato por alguna razón? ¿Ese script no hace todo lo que necesitaba? ¿Hay pasos adicionales que debo tomar? ¿Debo intentar registrar el programa y asociarlo con la extensión del archivo de otra manera?
Estoy en Ubuntu.
Puede abrir una terminal e investigar el entorno:
int main(int argc, char** argv) { std::system("gnome-terminal"); }