C programming fopen() απολυτο μονοπατι [Λύθηκε]

eCli | Σάβ, 11/15/2008 - 03:33 | 1' | 2

FILE *fp;
if ( ( fp = fopen( "$HOME/temp/file.txt", "r" ) ) == NULL )

Θελω να ορισω απολυτο μονοπατι του στυλ $HOME/temp/file.txt ή ~/temp/file.txt αλλα δεν παιζουν και τα δυο.Δοκιμασα και με getenv

char *Path;
Path = getenv("HOME");
FILE *fp;
if ( ( fp = fopen( "Path", "r" ) ) == NULL )

Αλλα ουτε αυτο δουλεψε...Καμια προταση??

Δώσε αστέρια!

MO: (ψήφοι: 0)

Σχόλια

To proto den mporei na doulepsei, ta environment variables me to $ prefix ta kanei expand to shell, i fopen perimenei apla ena string me to path.

To deytero den mporei na doulepsei, to "Path" einai apla ena string, den exei kamia sxesi me tin metavliti Path pou diloses parapano.

Ayto pou prepei na kaneis, einai na pareis ta periexomena tou HOME environment variable me tin getenv opos ekanes, kai meta na ftiakseis ena string pou na periexei ayto pou sou edose i getenv syn to ypoloipo path pou se endiaferei, os eksis (as poume oti ola ayta ta thes se mia synartisi open_home_file, gia xarin eykolias:

/* i parametros rel_path, tha mporouse na periexei
* to string "temp/file.txt" apo to paradeigma sou
*/
FILE *open_home_file(const char *rel_path)
{
FILE *fp;
char *home_path, *full_path;

if(!(home_path = getenv("HOME"))) {
fprintf(stderr, "no HOME environment variable found\n");
return 0;
}
full_path = alloca(strlen(home_path) + strlen(rel_path) + 2);
sprintf(full_path, "%s/%s", home_path, rel_path);

if(!(fp = fopen(full_path, "r"))) {
fprintf(stderr, "failed to open file: %s: %s\n", full_path, strerror(errno));
return 0;
}
return fp;
}

Σε ευχαριστω παρα πολυ φιλε μου για την αμεση και ευστοχη απαντηση σου, το προβλημα λυθηκε!