• Domingo 22 de Diciembre de 2024, 22:08

Autor Tema:  Re: FILAS Y COLUMNAS EN C  (Leído 4399 veces)

elpolo

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
Re: FILAS Y COLUMNAS EN C
« en: Miércoles 12 de Febrero de 2003, 12:41 »
0
Alguien sabe si existe alguna función en C que me devuelva la fila y la columna del fichero fuente donde se realiza la llamada a esta hipotética funcion?

En otras palabras, como puedo calcular la posición del curso en un fichero fuente?

© Jonathan ©

  • Moderador
  • ******
  • Mensajes: 1671
  • Nacionalidad: ar
    • Ver Perfil
    • http://www.einstec.com.ar
Re: FILAS Y COLUMNAS EN C
« Respuesta #1 en: Miércoles 12 de Febrero de 2003, 13:25 »
0
Hola amigo, aqui te presento un pequeño fragmento, el cual utilice para solucionar un pronlema similar al tuyo.::

Cuando trabajamos con un fichero, es posible que necesitemos acceder directamente a una cierta posición del mismo.  Para ello usamos "fseek", que tiene el formato:
    int fseek(FILE *fichero, long posic, int desde);

 Comentemos qué es cada cosa:
 

Es de tipo "int", lo que quiere decir que nos va a devolver un valor, para que comprobemos si realmente se ha podido saltar a la dirección que nosotros le hemos pedido: si el valor es 0, todo ha ido bien; si es otro, indicará un error (normalmente, que no hemos abiertos el fichero).
"fichero" indica el fichero dentro de el que queremos saltar.  Este fichero debe estar abierto previamente (con fopen).
"posic" nos permite decir a qué posición queremos saltar (por ejemplo, a la 5010).
"desde" es para poder afinar más: la dirección que hemos indicado con posic puede estar referida al comienzo del fichero, a la posición en la que nos encontramos actualmente, o al final del fichero (entonces posic deberá ser negativo).  Para no tener que recordar que un 0 quiere decir que nos referimos al principio, un 1 a la posición actual y un 2 a la final, tenemos definidas las constantes:

   SEEK_SET (0):  Principio
   SEEK_CUR (1):  Actual
   SEEK_END (2):  Final

Finalmente, si queremos saber en qué posición de un fichero nos encontramos, podemos usar "ftell(fichero)".

Para mas informacion acerca de la funcion de lectura de la posicion en un fichero, por fovor consulta la ayuda de tu compilador.

SALUDOS.
EINSTEC Tecnología «La única fuente del conocimiento es la experiencia.»

«Lo importante es no dejar de hacerse preguntas.»

elpolo

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
Re: FILAS Y COLUMNAS EN C
« Respuesta #2 en: Miércoles 12 de Febrero de 2003, 16:53 »
0
Antes de nada muchas gracias pero mi pregunta no era esa. Lo que quiero no es leer un fichero de entrada y situarme en alguna posición determinada. Mi intención es realizar una especie de depurador que genere un fichero de salida en el que me vaya indicando por qué fichero va evolucionando mi programa, porqué´fila y columna va, etc. Por lo tanto lo que yo busco es que en mi main.c pueda utilizar una función o algo así que me devuelva la posición en la que se encuentra la llamada a esta función dentro del código fuente. A ver si me puede ayudar alguien

Gracias de todas forma jonathan

Astor

  • Miembro MUY activo
  • ***
  • Mensajes: 112
    • Ver Perfil
Re: FILAS Y COLUMNAS EN C
« Respuesta #3 en: Jueves 13 de Febrero de 2003, 04:21 »
0
Podrias explicarte nuevamente ya que, sinceramente, no logro comprender tu necesidad.

elpolo

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
Re: FILAS Y COLUMNAS EN C
« Respuesta #4 en: Jueves 13 de Febrero de 2003, 10:24 »
0
A ver, supongamos que tengo el siguiente código fuente miPrograma.c

main()
{
.....
//aqui hago una llamada a una función
Escribe_Mens_Fichero_Trazas("miPrograma.c", fila_del_fichero_fuente,"Estoy en el programa principal");
.....
}

Lo que busco es hacer un fichero de trazas que vaya registrando la evolución del programa principal. En este fichero de trazas aparecerá una línea por cada llamada a la funcion Escribe_Mens_Fichero_Trazas("miPrograma.c", fila_del_fichero_fuente,"Estoy en el programa principal")

La linea en el fichero de trazas será
[miPrograma.c: Fila:fila_del_fichero_fuente: Mensaje:Estoy en el programa principal]

El problema es que no se como averiguar la linea donde hago la llamada a la funcion Escribe_Mens_Fichero_Trazas en el codigo fuente

Espero que te haya aclarado esto lo suficiente y q me puedas ayudar

Saludos

elpolo

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
Re: FILAS Y COLUMNAS EN C
« Respuesta #5 en: Jueves 13 de Febrero de 2003, 10:30 »
0
A ver, supongamos que tengo el siguiente código fuente miPrograma.c

main()
{
.....
//aqui hago una llamada a una función
Escribe_Mens_Fichero_Trazas("miPrograma.c", fila_del_fichero_fuente,"Estoy en el programa principal");
.....
}

Lo que busco es hacer un fichero de trazas que vaya registrando la evolución del programa principal. En este fichero de trazas aparecerá una línea por cada llamada a la funcion Escribe_Mens_Fichero_Trazas("miPrograma.c", fila_del_fichero_fuente,"Estoy en el programa principal")

La linea en el fichero de trazas será
[miPrograma.c: Fila:fila_del_fichero_fuente: Mensaje:Estoy en el programa principal]

El problema es que no se como averiguar la linea donde hago la llamada a la funcion Escribe_Mens_Fichero_Trazas en el codigo fuente

Espero que te haya aclarado esto lo suficiente y q me puedas ayudar

Saludos

gmantil

  • Miembro MUY activo
  • ***
  • Mensajes: 121
    • Ver Perfil
Re: FILAS Y COLUMNAS EN C
« Respuesta #6 en: Jueves 13 de Febrero de 2003, 14:06 »
0
Si entendí bien lo que quieres hacer es un interprete que ejecute tu programa y vaya mostrando por que línea de código va pasando?

gmantil

elpolo

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
Re: FILAS Y COLUMNAS EN C
« Respuesta #7 en: Jueves 13 de Febrero de 2003, 16:27 »
0
Lo que quiero es saber si existe una funcion de C que me devuelva la linea y columna desde el punto donde yo la invoque: pero en tiempo de ejecucion para poder pasarsela a otra funcion que sea la que me vaya generando la traza del programa

Entendistéis

gothmog

  • Miembro activo
  • **
  • Mensajes: 84
    • Ver Perfil
Re: FILAS Y COLUMNAS EN C
« Respuesta #8 en: Jueves 13 de Febrero de 2003, 21:31 »
0
Yo si entiendo lo q quieres hacer pero no acabo de verle la utilidad. De todos modos no se como se hara, pero para que quieres hacer eso? Si es para depurar, creo que la mayoria los depuradores te permiten detener el proceso en una linea determinada, se detienen si hay errores, avanzan paso a paso, etc.

Astor

  • Miembro MUY activo
  • ***
  • Mensajes: 112
    • Ver Perfil
Re: FILAS Y COLUMNAS EN C
« Respuesta #9 en: Jueves 13 de Febrero de 2003, 22:02 »
0
No entiendo del todo aun, si bien comprendo el significado de la fila de un ejecutable no logro hacerlo con el de columna (???).
Podrias por ejemplo entre cada linea incrementar una variable, mejor dicho un puntero que guardas en cierta zona de memoria (por lo que si se incrementa desde la primera linea, va a contener el numero de linea que se esta ejecutando).
El otro programa deberia acceder a la zona de memoria donde lo guardaste y de ahi leer por que linea va.

Podrias usar un grupo de bytes del vector de interrupcion que no esten utilizados (esto siempre y cuando trabajes en modo real).

elpolo

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
Re: FILAS Y COLUMNAS EN C
« Respuesta #10 en: Viernes 14 de Febrero de 2003, 10:00 »
0
Necesito saber esta informacion porque estoy programando con multihilo y todos sabreis la dificultad de depuración que esto presenta. Por este motivo necesito un fichero de trazas que vaya registrando la fila , el nombre del fichero fuente y un mensaje por la que va evolucionando mi programa.
Por cierto eso del vector de interrupciones no lo entiendo

Astor

  • Miembro MUY activo
  • ***
  • Mensajes: 112
    • Ver Perfil
Re: FILAS Y COLUMNAS EN C
« Respuesta #11 en: Viernes 14 de Febrero de 2003, 17:23 »
0
Bajo que arquitectura lo estas haciendo ?
Lo del vector de int es solo sobre DOS, pero si usas un sistema en mp tipo linux podrias usar memoria compartida.

elpolo

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
FILAS Y COLUMNAS EN C
« Respuesta #12 en: Viernes 21 de Febrero de 2003, 14:45 »
0
Existen unas directivas del preprocesador que me devuelven el numero de fila en un fichero fuente.
( __DATE__, __FILE__, __LINE__, __STDC__, __TIME__ )

__DATE__
Se expande a una cadena literal que da la fecha en que se invocó al traductor.

__FILE__
Se expande a una cadena literal que da el nombre del fichero fuente actual.

__LINE__
Se expande a una constante decimal entera que indica el número de línea del fichero actual.

__STDC__
Se expande a la constante decimal entera "1". El compilador debe suministrar otro valor (o
dejarla sin definir) cuando se invoca a la macro para otro entorno que no sea el de C estándar.

__TIME__
Se expande a una cadena literal que devuelve el instante en el que se llama al traductor.

Q os parece?