| |||
Llamadas al Sistema....... Alguien sabe realizar llamadas al sistema en linux, se realizan en C, el problema es que tengo q realizar la llamada al sistema de la orden tail, y no tengo mucha idea de como va eso. Espero vuestra ayuda. Gracias de antemano. |
| |||
Tail no es una llamada al sistema Bueno, yo se hacer llamadas al sistema de Linux, pero tail es un comando de Linux que muestra el final de un archivo. $ tail -n 3 archivo Muestra las tres ultimas lineas de un archivo. He mirado en el archivo "unistd.h" donde estan las 190 llamadas al sistema de Linux y tail no aparece. Pero bueno, yo te pongo un ejemplo de llamada al systema linux en C. Es igual que cualquier otra funcion: /* Llamada a stat */ #include <sys/stat.h> #include <unistd.h> #include <stdio.h> int main(void){ struct stat s; if( stat("/archivo", &s) ){ /* hacer algo con s */ }else{ printf("No funciono stat\n"); } } Las llamadas al sistema siempre devuelven 1 cuando tienen exito y un valor negativo si no. Puedes ver el numero de error , en el valor de la variable errno. #include <sys/stat.h> #include <unistd.h> #include <stdio.h> #include <errno.h> extern int errno; int main(void){ struct stat s; if( stat("/archivo", &s) ){ /* hacer algo con s */ if( S_ISDIR(s) ) printf("/archivo es un directorio"); }else{ printf("No funciono stat\n"); if (errno == EPERM ) printf("No tienes permisos"); } } Por lo demas las llamadas al sistema de Linux son exactamente iguales a cualquier otra funcion en C: Última edición por vfgt; 18/08/2003 a las 14:01 |
| |||
Gracias vfgt, ya sé que tail no es una llamada, pero tengo que hacer un ejercicio en C donde hacer la llamada al sistema de la funcion tail, head y wc; y mi pregunta era por si alguien había hecho esto alguna vez ya que no veo muy bien como hacerlo. Gracias. |
| |||
Si hombre eso es facilisimo: Se hace con la funcion system() tienes mas informacion en "man 3 system" Si pusieras el texto del ejercicio .... Una aproximacion facil seria: #include <stdlib.h> /* para system() */ #include <stdio.h> /* para printf y fopen */ int main( void ){ int retval; FILE* f; char c; retval = system("tail ./archivo>./salida"); if( (retval != 127) && (retval != 1) ){ if( (f = fopen("./salida","r")) != null){ printf("salida de tail:\n"); while( ( c= fgetc(f) ) != EOF ){ ptuc(c); } fclose(f); }else{ printf("No se puede abrir la salida de tail"); } }else{ printf("Fallo la llamada a system()\n"); return; } } Es una aproximacion facilona, ya que rediriges la salida a un archivo, y lees el archivo. Recuerda que esto esta escrito de memoria, a toda prisa y puede contener errores. Espero que esto te ayude. |
| |||
Vfgt eres un tio cojonudo, me ayudas mucho, te lo agradezco, si pudieras darme tu email te enviaría realmente un archivo adjunto con lo que tengo que hacer, la verdad es que te veo bastante puesto en el tema y la verdad me hacía falta alguien como tu para poder ayudarme, si no te importa y me pudieras dar tu email te lo adjunto para que le eches un vistacito. Muchísimas gracias. |
| |||
Respuesta: Llamadas al Sistema....... Hola, necesito hacer una llamada del sistema direktamente al kernell de linux, haciendo algunas averiguaciones he llegado a saber ke tengo ke editar el kontenido de unistd.h pero eso es precisamente lo ke no se komo hacer, agradeceria su ayuda kon esto, gracias |
| ||||
Respuesta: Llamadas al Sistema....... Cerrado, no se permite revivir temas viejos. eskurra, te sugiero leer lo siguiente: Lee Las Políticas de Foros del Web. Lee este tema==> Mejoremos la ortografía. A los demás, les agradecería que por favor reporten , mensajes revividos u otras anomalías para no estar poniendo más mensajes sobre los mismos. Gracias.
__________________ NO PERDAMOS NUESTRO LINDO IDIOMA ESPAÑOL |