Pregunta

Estoy escribiendo un programa en C en Linux.Los comandos como execv() requieren una ruta en forma de cadena c.¿Existe algún comando que devuelva la ruta actual en forma de cadena de estilo C?

¿Fue útil?

Solución

obtenercwd():

SINOPSIS

#include <unistd.h>

char *getcwd(char *buf, size_t size);

DESCRIPCIÓN

El obtenercwd() La función colocará un nombre de ruta absoluto del directorio de trabajo actual en la matriz señalada por buf y devolver buf.El nombre de ruta copiado en la matriz no contendrá componentes que sean enlaces simbólicos.El tamaño El argumento es el tamaño en bytes de la matriz de caracteres a la que apunta el buf argumento.Si buf es un puntero nulo, el comportamiento de getcwd() no está especificado.

VALOR DEVUELTO

Al finalizar con éxito, obtenercwd() devolverá el buf argumento.De lo contrario, obtenercwd() devolverá un puntero nulo y establecerá errno para indicar el error.El contenido de la matriz señalada por buf entonces no están definidos....

Otros consejos

El camino El argumento de execv() es la ruta a la aplicación que desea ejecutar, no el directorio de trabajo actual (que será devuelto por getcwd()) o la ruta de búsqueda del shell (que será devuelta por getenv("PATH")).

Dependiendo de lo que esté haciendo, puede sacar más provecho de la función system() en la biblioteca C en lugar de la familia exec() de nivel inferior.

Esto es no ANSI C:

#include <unistd.h>

char path[MAXPATHLEN];
getcwd(path, MAXPATHLEN);
printf("pwd -> %s\n", path);

Si la ruta puede ser una ruta relativa, debería poder usar '. o './' como el camino.No estoy seguro de si funcionará, pero puedes intentarlo.

No soy un programador profesional, por lo que esta no es una respuesta exacta.

Lo que debe hacer es tomar la variable de entorno PWD (directorio de trabajo actual)

No estoy seguro de en qué biblioteca se encuentra, pero es un encabezado estándar de Linux.

Miraré por ahí a ver si lo encuentro.

editar:

Estaba pensando en ,obtenerv() lo que sería útil si también necesita ejecutar comandos del sistema y necesita las distintas rutas de contenedor ubicadas en PATH

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top