Percorso "ottenimento" in Linux
-
09-06-2019 - |
Domanda
Sto scrivendo un programma C in Linux.Comandi come execv() richiedono un percorso sotto forma di stringa C.Esiste un comando che restituirà il percorso corrente sotto forma di una stringa in stile c?
Soluzione
SINOSSI
#include <unistd.h> char *getcwd(char *buf, size_t size);
DESCRIZIONE
IL getcwd() La funzione inserirà un percorso assoluto della directory di lavoro corrente nell'array puntato da buf e restituisce buf.Il percorso copiato nell'array non deve contenere componenti che siano collegamenti simbolici.IL misurare argomento è la dimensione in byte dell'array di caratteri puntato da buf discussione.Se buf è un puntatore nullo, il comportamento di getcwd() non è specificato.
VALORE DI RITORNO
Una volta completato con successo, getcwd() restituirà il buf discussione.Altrimenti, getcwd() restituirà un puntatore nullo e verrà impostato err per indicare l'errore.Il contenuto dell'array puntato da buf sono quindi indefiniti....
Altri suggerimenti
IL sentiero l'argomento di execv() è il percorso dell'applicazione che desideri eseguire, non la directory di lavoro corrente (che verrà restituita da getcwd()) o il percorso di ricerca della shell (che verrà restituito da getenv("PATH")).
A seconda di cosa stai facendo, potresti ottenere più risultati dalla funzione system() nella libreria C piuttosto che dalla famiglia exec() di livello inferiore.
Questo è non ANSI C:
#include <unistd.h>
char path[MAXPATHLEN];
getcwd(path, MAXPATHLEN);
printf("pwd -> %s\n", path);
Se il percorso può essere un percorso relativo, dovresti essere in grado di usare ". o './' come percorso.Non sono sicuro che funzionerà, ma potresti provarlo.
Non sono un programmatore professionista quindi questa non è una risposta esatta.
Quello che devi fare è prendere la variabile d'ambiente PWD (presente directory di lavoro)
Non sono sicuro in quale libreria si trovi, ma è un'intestazione Linux standard.
Mi guarderò intorno e vedrò se riesco a trovarlo.
modificare:
stavo pensando agetenv() che potrebbe essere d'aiuto se hai bisogno anche di eseguire comandi di sistema e hai bisogno dei vari percorsi dei contenitori situati in PATH