¿Cómo puedo llamar a awk o sed dentro de un programa c? Sé que podría usar exec(), pero no quiero lidiar con fork() y todas esas otras maldades.¿Cómo puedo llamar awk o sed desde dentro de un programa c?
Respuesta
¿Funcionaría popen
? Genera el proceso, luego lee/escribe con un FILE*
manejar
Entonces su elección es system()
, o usando alguna biblioteca que envuelve el desove del proceso para usted. Lo último, o la forma de núcleo rígido que quería evitar, se recomienda si desea un control preciso sobre errores, tuberías, etc.
sistema() es bastante fácil.
Pero debe intentar no hacer esto si puede. Los scripts funcionan mejor cuando están en la parte superior de las cosas, no debajo. Si estás en UNIX, a menudo es mucho mejor dividir el trabajo y escribir un script de alto nivel para llamar a todas las piezas.
Recuerdo ver a un programador agregar una gran cantidad de llamadas al sistema en su código C para evitar tener que aprender el shell Bourne. Pensó que era una forma inteligente y rápida de ponerlo en marcha, sin embargo, cuando falló, falló mal. Perdió grandes cantidades de tiempo depurando el desastre. Hubiera sido mucho más rápido simplemente aprender algunos comandos de shell simples ...
Paul.
libc
tiene funciones system
y popen
, que funcionan un poco como esto:
int system(cont char *command) {
const char *argv[4] = {"/bin/sh", "-c", command};
int status;
pid_t child = fork();
if (child == 0) {
execve(argv[0], argv, NULL);
exit(-1);
}
waitpid(child, &status, 0);
return status;
}
FILE *popen(const char *command, const char *type) {
int fds[2];
const char *argv[4] = {"/bin/sh", "-c", command};
pipe(fds);
if (fork() == 0) {
close(fds[0]);
dup2(type[0] == 'r' ? 0 : 1, fds[1]);
close(fds[1]);
execve(argv[0], argv, NULL);
exit(-1);
}
close(fds[1]);
return fdopen(fds[0], type);
}
(excepto con más comprobación de errores y cosas)
Si desea un control más preciso sobre el manejo (en vez de ir a través de argumentos sh
), o si desea controlar más de uno de {stdin, stdout, stderr}
, tendrá que escribirlo usted mismo o buscar una biblioteca. Pero la biblioteca estándar cubre la mayoría de los casos de uso.
Puede hacerlo a través del sistema () llamar Este Thread es un buen ejemplo
- 1. sed o awk multiline replace
- 2. ¿Cómo puedo llamar a notepad.exe desde un programa C?
- 3. ¿Cómo reiniciar Linux desde dentro de un programa C++?
- 4. Llamar LLVM Jit desde el programa c
- 5. Ejecutar programa desde dentro de un programa C
- 6. sed/awk mayúsculas cadenas
- 7. ¿Puedo llamar a startActivity() desde dentro onResume()?
- 8. cómo usar sed, awk o gawk para imprimir solo lo que coincide?
- 9. ¿Cómo ejecutar un programa Java desde C#?
- 10. Llamar a un programa externo desde OCaml
- 11. Eliminar líneas del archivo con SED o AWK
- 12. ¿Cómo puedo llamar al programa python desde VBA?
- 13. uso variable de fiesta desde dentro AWK
- 14. Llamar a python desde un programa C++ para su distribución
- 15. ¿Cómo puedo llamar a C++/CLI desde C#?
- 16. ¿Cómo obtener el tamaño de una función C desde dentro de un programa C o con un ensamblaje en línea?
- 17. Llamar línea de comando desde el programa C
- 18. awk: configuración de las variables de entorno directamente desde dentro de una secuencia de comandos awk
- 19. Estoy desconcertado aquí sobre awk, sed, etc.
- 20. diferencias entre grep, awk y sed
- 21. ¿Cómo compilo el código Perl dentro de un programa C?
- 22. ¿Cómo puedo llamar a un ensamblado de .NET desde C/C++?
- 23. Llamar a comandos SVN desde un programa java
- 24. ¿Cómo cambiar el separador decimal con awk/sed?
- 25. segmentos dentro de un programa C ejecutable
- 26. Cómo puedo llamar a las funciones de C++ desde ruby
- 27. Llamar C++ (C) desde el lenguaje D
- 28. ¿Cómo puedo ejecutar un comando de línea de comando desde un programa en C++
- 29. ¿Cómo puedo llamar a Erlang desde Python?
- 30. C# AssemblyFileVersion uso dentro de un programa