Pero si lo ves fácil, es cuestión de intentarlo.
No se trata de "intentarlo",
sino que ya te lo dí hecho.
¿Qué más tengo que hacer?
No te dí el ejecutable, pero es lo mismo.
El programa
imposible.c es el fuente.
Con un compilador estándar, como
gcc,
se genera el ejecutable
imposible.exe.
Una vez generado, se lo puede ejecutar en tu sistema (si no es linux, quizá el ejecutable se llame imposible.out).
Es un
programa ejecutable que acepta como parámetro otros archivos.
Se puede ejecutar:
imposible.exe hola.txt
imposible.exe otroarch.dll
imposible.exe denuevo.png
Y finalmente, le puedo pasar como parámetro a sí mismo:
imposible.exe imposible.exe_____________
No voy a cargar el ejecutable acá, porque
el foro no admite archivos adjuntos ejecutables,
y porque volcar el contenido conllevaría que aparezcan
caracteres unicode no-imprimibles.
Pero "
no-imprimible" no quiere decir "
no-procesable".
El archivo se puede leer y "hacer algo" con él, por ejemplo, contar su número de caracteres, o imprimir una "@" por cada byte del archivo, como en el siguiente código:
#include stdio.h
#include stdarg.h
int main(int argc, char *argv[]) {
FILE *f;
char c;
if (argc < 1) return 1; /* Error 1: no hay INPUTs */
f = fopen(argv[1],"r");
if (f == NULL) return 2; /* Error 2: apertura de archivo errónea */
while (feof(archivo) == 0) {
fgetc(f);
printf("@");
}
fclose(f);
return 0;
}
____________
Cualquier programa que admita un archivo como parámetro satisface lo que vos planteás.
Si después el programa hace algo o no con lo que le pasaste como parámetro, es cosa de él.
Pero pasar un programa como parámetro a otro es algo trivial.
Y pasarse a sí mismo como parámetro también es trivial, porque es cuestión de hacer una llamada del programa, con él mismo como parámetro.
¿Cómo no me voy a enojar, si es algo tan obvio para cualquiera que haya programado dos líneas en su vida?
Y ni siquiera hace falta ser programador para esto, sino usar algún shell que permita llamar programas con parámetros.
Agarrás cualquier programa (como el RAR.EXE por ejemplo) y le pasás cualquier cosa como parámetro (por ejemplo, el mismo RAR.EXE).
Te va a saltar un mensaje de error, porque RAR.EXE no es un archivo de tipo "comprimido", pero el archivo está procesado igual.