Creando nuestros propios comandos de Bach en C

Iniciado por fary, 5 Agosto 2010, 05:49 AM

0 Miembros y 1 Visitante están viendo este tema.

fary

Creando nuestros propios comandos de batch en C

Indice:

1.Introduccion
2.¿como funciona la Ms Dos?
3.Empezando a codear nuestro propio comando
4.Despedida


1.INTRODUCCION

Bueno en este tutorial veremos como crear nuestros propios comandos para la Ms Dos, yo creare algo simple, pero empleando la misma técnica podeis crearos cualquier comando que podais imaginar, es cosa de hecharle imaginación ;).

2.¿COMO FUNCIONA LA MS-DOS?

Bien, la Ms Dos funciona mediante  procesamiento por  lotes, esto supongo que todos lo sabran ya, ¿qué significa esto? Sifnifica que cuando ejecutamos por ejemplo el comando echo lo que estamos haciendo es llamar a un exe ( que esta en la carpeta System32) y pasarle unos parametros, el exe lo que ara es procesar los parametros que le hemos enviado y generar un retorno que muestra la Ms Dos , dando la sensación de que todos los comandos los tiene la misma consola.

3.EMPEZANDO A CODEAR

Siguiendo lo ya explicado en el punto 2 va a ser muy facil desarrollar nuestro comando. Lo primero de todo abriremos nuestro compilador de C ( da igual cual sea)  Proyecto>nuevo  y abrimos un proyecto de consola y ahora.... a codear!!


vale, tenemos el siguiente codigo ( por regla general):

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
 

}


si nos fijamos en el main tenemos unos parametros (int argc, char *argv[]) esos parametros son los argumentos que se le pasan a nuestro exe ,osea lo que recibira  nuestro comando, explicando un poco mas lo que significa, esto: int argc significa el numero de parametros que se le a pasado y esto: char *argv[] es un array con los parametros, bien, sabiendo ya esto ya sabemos por donde recibiremos los parametros que se le pasan a nuestro futuro comando!!.
ahora simplemente tenemos que hacer lo que nosotros queramos que haga, yo por ejemplo generare un comando semejante a echo yo le llamare DrinkEcho jeje veamos como seria el code:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
   printf("%s\n",argv[1]);
   system("PAUSE");
}


Bien con eso ya tendiramos nuestro comado generado, lo tenemos que compilar con el nombre que va a tener nuestro comando.

UNA NOTA IMPORTANTE es que al estar programando en consola los datos que devuelve nuestro ejecutable los devuelve a la Ms Dos con lo cual de eso no nos tenemos que preocupar.

Ahora solo queda provar el comando... lo metemos en system32 y vamos a testear nuestro comando:



4.DESPEDIDA

Bueno espero que este minitutorial les haya gustado y les haya servido para aprender a crear sus comandos de Batch si esque no sabian.

Un salu2!. Drinky94.
Un byte a la izquierda.

leogtz

Tienes que comprobar que al ejecutable se le haya enviado un paramétro, sino es así, es posible que lanze un error "segmentation fault".

Ejemplo en C++:

Código (cpp) [Seleccionar]
#include <iostream>
#include <cstdlib>
int main(int argc, char **argv)
{
    if(argc != 2)
    {
        std::cerr << argv[0] << " cadena" << std::endl;
        exit(EXIT_FAILURE);
    }
    std::cout << argv[1] << std::endl;
    return EXIT_SUCCESS;
}
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

Binary_Death

Error.
Batch tiene comandos internos y externos. Los internos los incluye el propio intérprete, la CMD.EXE, los externos, son ejecutables hallados en el directorio de Windows y de System32...
El comando "Echo" es un comando interno, eso quiere decir que por mucho que busques no encontrarás un "echo.exe". Es un comando interno.

Aparte de eso, buena info ^^

fary

Cita de: Leo Gutiérrez. en  5 Agosto 2010, 06:58 AM
...

Si, es cierto, pero fue mas que un ejemplo...tambien podria haber creado un comando sin parametros XD

@Binary_Death la idea era que el usuario comprendiese como fucnionan la mayoria de los comandos y como iva a funcionar el nuestro  :)

salu2!
Un byte a la izquierda.