Thread View: pl.comp.os.linux.programowanie
6 messages
6 total messages
Started by Michał Kochanowicz
Thu, 30 Sep 1999 20:46
fopen i tylda (home dir)
Author: Michał Kochanowicz
Date: Thu, 30 Sep 1999 20:46
Date: Thu, 30 Sep 1999 20:46
11 lines
1272 bytes
1272 bytes
Cześć
Próbuję w programie użyć fopen("~/filename", "r"); Niestety nie działa
to - funkcja zwraca NULL. Czy jest niedozwolone takie użycie tyldy? A
jeśli tak, to jak znaleźć katalog domowy usera, przecież nie musi być to
/home/username - np. na uczelni mam /home/miriam/stud/mkochano...
Pozdrawiam
--
--==Michał=Kochanowicz==-----------==mkochano@miriam.ee.pw.edu.pl==--
--==Finger me for PGP key or visit www.ee.pw.edu.pl/~mkochano/PGP==--
Re: fopen i tylda (home dir)
Author: Krzysztof Krzyżaniak
Date: Thu, 30 Sep 1999 20:12
Date: Thu, 30 Sep 1999 20:12
22 lines
1612 bytes
1612 bytes
Pewnego dnia, a było to Thu, 30 Sep 1999 22:46:57 +0200 przyszła do mnie
wiadomość od <mkochano@ee.pw.edu.pl> i powiedziała:
>Cześć
>
>Próbuję w programie użyć fopen("~/filename", "r"); Niestety nie działa
>to - funkcja zwraca NULL. Czy jest niedozwolone takie użycie tyldy? A
>jeśli tak, to jak znaleźć katalog domowy usera, przecież nie musi być to
>/home/username - np. na uczelni mam /home/miriam/stud/mkochano...
Powinna być zdefiniowana zmienna $HOME. Można odczytać jej wartość za pomocą
funkcji char* getenv(const char* NAME) :
home=getenv("HOME");
eloy
--
* Krzysztof `eloy' Krzyżaniak * HP -> http://www.pawnhearts.eu.org/~eloy/
* <eloy@pawnhearts.eu.org> * Kabaret Loza44 -> http://loza44.topnet.pl/
"Jesteś jak w lesie plama słoneczna,
Tak nieuchwytna, lekka, taneczna." "Do miłej" Jan Sztaudynger
Re: fopen i tylda (home dir)
Author: Jacek Rafal Radzikowski
Date: Thu, 30 Sep 1999 23:36
Date: Thu, 30 Sep 1999 23:36
10 lines
1137 bytes
1137 bytes
Michał Kochanowicz <mkochano@ee.pw.edu.pl> wrote:
>Cześć
>Próbuję w programie użyć fopen("~/filename", "r"); Niestety nie działa
>to - funkcja zwraca NULL. Czy jest niedozwolone takie użycie tyldy? A
>jeśli tak, to jak znaleźć katalog domowy usera, przecież nie musi być to
>/home/username - np. na uczelni mam /home/miriam/stud/mkochano...
zmienna srodowiskowa HOME
pzdr.
j.
Re: fopen i tylda (home dir)
Author: Bohdan R. Rau
Date: Fri, 01 Oct 1999 08:00
Date: Fri, 01 Oct 1999 08:00
10 lines
1077 bytes
1077 bytes
On Thu, 30 Sep 1999 22:46:57 +0200,
Micha³ Kochanowicz <mkochano@ee.pw.edu.pl> wrote:
>Cze¶æ
>
>Próbujê w programie u¿yæ fopen("~/filename", "r"); Niestety nie dzia³a
>to - funkcja zwraca NULL.
Tylda jest znakiem dla shella, a nie systemu!
ethanak
Re: fopen i tylda (home dir)
Author: Cezary H. Noweta
Date: Fri, 01 Oct 1999 08:42
Date: Fri, 01 Oct 1999 08:42
77 lines
2981 bytes
2981 bytes
Witam,
Michał Kochanowicz wrote:
> Próbuję w programie użyć fopen("~/filename", "r"); Niestety nie działa
> to - funkcja zwraca NULL. Czy jest niedozwolone takie użycie tyldy? A
> jeśli tak, to jak znaleźć katalog domowy usera, przecież nie musi być to
> /home/username - np. na uczelni mam /home/miriam/stud/mkochano...
W zasadzie wszystko juz zostalo powiedziane w poprzednich Replies. Dodam
tylko, ze jesli zmienna HOME nie jest ustawiona, to BASH (inne shelle
nie wiem) home_dir wyszukuje w passwd na podstawie uzytkownika, ktory
_uruchomil_ (nie efektywnego przy suid) SHELLA.
Ponizszy przyklad otwiera plik "~/file". Funkcja expand_tilde(char *buff)
wpisuje do buff home_dir (bez koncowego '/') i zwraca 0 jesli OK lub
!0 jesli wystapil blad.
------
expand.c
------
#include <pwd.h>
#include <unistd.h>
#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#ifndef PATH_MAX
#include <limits.h>
#endif
int expand_by_env(char *buff)
{
char *home = getenv("HOME");
return(!home || !memcpy(buff, home, strlen(home) + 1));
}
int expand_by_uid(char *buff)
{
uid_t uid = getuid();
struct passwd *pw_ent;
setpwent();
while ( (pw_ent = getpwent()) && pw_ent->pw_uid != uid );
endpwent();
return(!pw_ent || !memcpy(buff, pw_ent->pw_dir, strlen(pw_ent->pw_dir) + 1));
}
int expand_tilde(char *buff)
{
return(expand_by_env(buff) && expand_by_uid(buff));
}
int main()
{
char file_name[PATH_MAX + 1];
if ( expand_tilde(file_name) ) {
fprintf(stderr, "ERROR: HOME unset & (out of memory | not such user)\n");
return(-1);
}
memcpy(file_name + strlen(file_name), "/file", strlen("/file") + 1);
printf("Filename after expanding: %s\n", file_name);
printf("FILE *: %p\n", fopen(file_name, "r"));
return(0);
}
------
-- pozdrawiam
--
Cezary H. Noweta 90-237 LODZ, ul. J.Matejki 34/38 POLAND
(chn@irys.usun.drugiitrzeciczlon.uni.lodz.pl) +48 42 6356013, 6356012
University of Lodz - Main Library fax 6781678
Re: fopen i tylda (home dir)
Author: Michał Kochanowicz
Date: Fri, 01 Oct 1999 14:18
Date: Fri, 01 Oct 1999 14:18
8 lines
1261 bytes
1261 bytes
Bardzo dziękuję wszystkim za odpowiedzi (szczególnie Krzysztofowi Krzyżaniakowi, który, sądząc po dacie, odpowiedział na pytanie zanim zdążyłem je zadać ;))) ). Pozdrawiam! -- --==Michał=Kochanowicz==-----------==mkochano@miriam.ee.pw.edu.pl==-- --==Finger me for PGP key or visit www.ee.pw.edu.pl/~mkochano/PGP==--
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads