znaczacy > comp.lang.* > comp.lang.c

Marcin Gardyjan (03.11.2003, 17:36)
Czemu stala _MAX_PATH nie dziala w gcc pod Linuxem?
Przeciez ona jest w ANSI C i w stdlib.h
Mam
#inlude <stdlib.h>
a mimo to kompilator sie burzy.

pod Windowsem pod kazdym kompilatorem dziala.

Zrobilem:

#define _MAX_PATH 256

ale to nie jest najlepsze rozwiazanie, bo jesli pod Linuxem mozna uzywac
wiekszych siezek dostepu niz 256 bajtow to nie bedzie dobrze.

Pozdrawiam
Marcin Gardyjan
Tomasz Bywalec (03.11.2003, 18:37)
On 3 Nov 2003 16:36:15 +0100, Marcin Gardyjan <mgkiler2>
wrote:

[..]
> Pozdrawiam
> Marcin Gardyjan
>


Moze sprobuj MAX_PATH?

W <stdlib.h> pod MinGW symbol _MAX_PATH jest definiowany (jako rowny
MAX_PATHowi) tylko przy wylaczonej opcji __STRICT_ANSI__. Moze przy
kompilacji wlaczasz jakas opcje, ktora kaze kompilatorowi trzymac sie
scisle standardu ANSI? (np. -ansi albo -pedantic) Ja wogole nie slyszalem
o symbolu _MAX_PATH (ale o MAX_PATH owszem :-). Moze nie jest standardowy?

Pozdrawiam,
Tomek Bywalec
Marcin 'Qrczak' Kowalczyk (03.11.2003, 18:41)
On Mon, 03 Nov 2003 16:36:15 +0100, Marcin Gardyjan wrote:

> Czemu stala _MAX_PATH nie dziala w gcc pod Linuxem?
> Przeciez ona jest w ANSI C i w stdlib.h


Nie jest w ANSI C.

Pod Linuxem (zgodnie z POSIX-em i Single Unix Specification)
w <limits.h> jest PATH_MAX. U mnie wynosi 4096.
Marcin Gardyjan (03.11.2003, 20:04)
Ale stdlib.h jest w ANSI C a _MAX_PATH np w Visualu jest zdefiniowany
wlasnie w stdlib.h i w MSDN tez pisze ze stdlib.h.
Wiec jak to jest?

Pozdrawiam
Marcin Gardyjan

----- Original Message -----
From: "Marcin 'Qrczak' Kowalczyk" <qrczak>
To: <pl-comp-lang-c>
Sent: Monday, November 03, 2003 5:41 PM
Subject: Re: _MAX_PATH nie chce dzialac w gcc
[..]
Marcin 'Qrczak' Kowalczyk (03.11.2003, 20:54)
On Mon, 03 Nov 2003 19:04:03 +0100, Marcin Gardyjan wrote:

> Ale stdlib.h jest w ANSI C a _MAX_PATH np w Visualu jest zdefiniowany
> wlasnie w stdlib.h i w MSDN tez pisze ze stdlib.h.
> Wiec jak to jest?


Jak widać, w stdlib.h w Visualu jest nie tylko to, co jest wymagane przez
ANSI C. Co samo w sobie nie jest błędem, bo identyfikatory zaczynające
się od podkreślenia i dużej litery za nim są zarezerwowane dla
implementacji C.
Damian Pietras (03.11.2003, 21:10)
W artykule <001301c3a21f$d1336c80$dcdd63d9@a1400>, Marcin Gardyjan napisał(a):

> Czemu stala _MAX_PATH nie dziala w gcc pod Linuxem?
> Przeciez ona jest w ANSI C i w stdlib.h
> Mam
> #inlude <stdlib.h>
> a mimo to kompilator sie burzy.
> pod Windowsem pod kazdym kompilatorem dziala.
> Zrobilem:
> #define _MAX_PATH 256
> ale to nie jest najlepsze rozwiazanie, bo jesli pod Linuxem mozna uzywac
> wiekszych siezek dostepu niz 256 bajtow to nie bedzie dobrze.


Problem w tym, ze Linux obsluguje mase systemow plikow, rowniez
sieciowych (a sieciowy system plikow ma ograniczenia lokalnego systemu),
wiec nie ma uniwersalnej stalej. Albo przyjmiesz jakies zalozenie, albo
uzyj pathconf().
Marcin Gardyjan (03.11.2003, 21:42)
> Problem w tym, ze Linux obsluguje mase systemow plikow, rowniez
> sieciowych (a sieciowy system plikow ma ograniczenia lokalnego systemu),
> wiec nie ma uniwersalnej stalej. Albo przyjmiesz jakies zalozenie, albo
> uzyj pathconf().


No chyba, ze do PATH_MAX wpiszemy wartosc najwiekszej mozliwej nazwy w pliku
jaka pozwala najbardziej tolerancyjny z tych systemow plikow.
Chodzi o to, ze jak damy:

char name[MAX_PATH];

i gdzies tam zabespieczenie, ze nie mozna wpisac wiecej niz MAX_PATH

to zeby sie nie wywalo z bledem pamieci i jednoczesnie pozwolilo na wpisanie
kazdej sciezki dostepu jaka pozwala system.

Pozdrawiam
Marcin Gardyjan

----- Original Message -----
From: "Damian Pietras" <daper>
To: <pl-comp-lang-c>
Sent: Monday, November 03, 2003 8:10 PM
Subject: Re: _MAX_PATH nie chce dzialac w gcc
[..]
Michał Lachowicz (03.11.2003, 23:15)
Marcin 'Qrczak' Kowalczyk wrote:
> On Mon, 03 Nov 2003 19:04:03 +0100, Marcin Gardyjan wrote:
>[...]
> bo identyfikatory zaczynające
> się od podkreślenia i dużej litery za nim są zarezerwowane dla
> implementacji C.


Gdzie można coś o tym przeczytać ?
Marcin 'Qrczak' Kowalczyk (03.11.2003, 23:51)
On Mon, 03 Nov 2003 22:15:10 +0100, Michał Lachowicz wrote:

> > bo identyfikatory zaczynające
>> się od podkreślenia i dużej litery za nim są zarezerwowane dla
>> implementacji C.

> Gdzie można coś o tym przeczytać ?



Mateusz Łoskot (04.11.2003, 00:57)
In article <001301c3a242$878ad5f0$a6d74dd5@a1400> Marcin Gardyjan wrote:
>> Problem w tym, ze Linux obsluguje mase systemow plikow, rowniez
>> sieciowych (a sieciowy system plikow ma ograniczenia lokalnego systemu),
>> wiec nie ma uniwersalnej stalej. Albo przyjmiesz jakies zalozenie, albo
>> uzyj pathconf().

> No chyba, ze do PATH_MAX wpiszemy wartosc najwiekszej mozliwej nazwy w pliku
> jaka pozwala najbardziej tolerancyjny z tych systemow plikow.


A jak a to nazwa (długość) ?
Chyba takowej nie ma ;-)

> Chodzi o to, ze jak damy:
> char name[MAX_PATH];
> i gdzies tam zabespieczenie, ze nie mozna wpisac wiecej niz MAX_PATH
> to zeby sie nie wywalo z bledem pamieci i jednoczesnie pozwolilo na wpisanie
> kazdej sciezki dostepu jaka pozwala system.


Znalazlem taka dyskusje z paroma przykładami:



A wydaje mi się, że to zależy od sposobu implementacji funkcji
takich jak fopen, jak to wygląda to nie sprawdzałem (jeszcze ;-).

Pozdrawiam
Sektor van Skijlen (04.11.2003, 17:14)
Marcin Gardyjan <mgkiler2> wrote:
> Ale stdlib.h jest w ANSI C a _MAX_PATH np w Visualu jest zdefiniowany
> wlasnie w stdlib.h i w MSDN tez pisze ze stdlib.h.
> Wiec jak to jest?


To, ze jakies deklaracje zawieraja sie w jakims standardowym naglowku,
nie oznacza jeszcze, ze sa standardowe.

Np. w stdio.h znajduje sie tez deklaracja funkcji fileno(), ktora nie jest
w standardzie ANSI C (no, chyba ze w jest w ktoryms podleglym, ale to nie
zmienia faktu).

Standard zarowno kazdego C jak i kazdego C++ wymaga jedynie, ze ty wczytujesz
jakis standardowy naglowek i masz dostepne odpowiednie standardowe deklaracje.
Ale nikt nie zabrania umieszczac w standardowym pliku naglowkowym (czy tez
czynic dostepnymi w inny sposob) roznych niestandardowych deklaracji.
Podobne wątki