giełda, akcje, inwestycje
 ° Forum ° Odpowiedz ° Rejestracja ° Szukaj °
Numizmatyka - monety ° Internetowa Auto giełda °

Limit otwieranych plików?

Forum / Linux / Limit otwieranych plików?
Autor Wiadomość
Jan Stożek

Posted: 8 Lut 2010 19:59:32



Witam,

Piszę sobie program w C++, który wczytuje pewną liczbę danych z
niewielkich plików. Każdy plik otwieram do odczytu, wczytuję
zawartość i explicite zamykam.

Tymczasem po wczytaniu 340 plików (dokładnie!) kolejne próby otwarcia
pliku już się nie udają. Czy to jakiś bug, feature, czy ograniczenie
środowiska albo systemu?

gcc 4.3.2, OpenSUSE 11.2, kernel 2.6.27.42.

Z góry dzięki za hint.




Kamil Jońca

Posted: 8 Lut 2010 20:06:03




Witam,

Piszę sobie program w C++, który wczytuje pewną liczbę danych z
niewielkich plików. Każdy plik otwieram do odczytu, wczytuję
zawartość i explicite zamykam.

Tymczasem po wczytaniu 340 plików (dokładnie!) kolejne próby otwarcia
pliku już się nie udają. Czy to jakiś bug, feature, czy ograniczenie
środowiska albo systemu?

A skąd my mamy to wiedzieć bez
a) kodu
b) kodu błędu

KJ




Jan Stożek

Posted: 8 Lut 2010 20:48:20



Po głębokim namyśle Kamil Jońca napisał w poniedziałek, 8 lutego 2010
21:06:

a) kodu
b) kodu błędu

Kod jest dość rozproszony. Nevertheless:

ModelCalculator::ModelCalculator (string FileName)
{
// Tu jest inicjacja innych atrybutów obiektu

static int count = 0;

ifstream LoadFile(FileName.c_str(), ifstream::in);
if (LoadFile.is_open())
{
// Tu następuje wczytanie zawartości
LoadFile.close();
cout << "Opened: " << count++ << endl;
}
}


I wywołanie:

{
DIR * dirp;
dirent * dp;

if ((dirp = opendir(DAT_DIR))) {
while ((dp = readdir(dirp)) != NULL) {
string FileName = dp-d_name;
if (FileName.rfind(DAT_EXT) != string::npos)
{
_model.push_back(new ModelCalculator(DAT_DIR + FileName));
}
}
closedir(dirp);
}
}

_model jest wektorem obiektów typu ModelCalculator, DAT_DIR -
wskazuje na katalog z plikami danych, DAT_EXT - zawiera rozszerzenie
pliku danych.

Kod trochę oczyściłem z fragmentów mało istotnych.

Kodu błędu jako takiego nie ma - ani konstruktor ani metoda open
klasy ifstream go nie zwracają. Bity statusu klasy (failbit, badbit,
eofbit) raczej nie zawierają szczegółowych informacji z systemu
plików ("failbit is generally set by an input operation when the
error was related with the internal logic of the operation itself,
while badbit is generally set when the error involves the loss of
integrity of the stream, which is likely to persist even if a
different operation is performed on the stream"), więc nawet ich nie
sprawdzam.

Nie jest to związane ani z uprawnieniami, ani z istnieniem plików -
pliki niczym specjalnym się nie odróżniają od pozostałych, zresztą
poza programem otwieram je bez problemu. Kontrolnie skasowałem kilka
plików, które program otwierał i okazało się, że liczba otwartych
plików pozostała bez zmian - po prostu program otworzył kilka
dalszych. A to IMHO sugeruje istnienie ograniczeń po stronie systemu
(?) - w każdym razie nie związanego ani z algorytmem ani z systemem
plików.




Wojciech Jaczewski

Posted: 8 Lut 2010 22:03:30



Sprawdź przy pomocy programu strace, czy rzeczywiście pliki są zamykane,
oraz jaki błąd zwraca system operacyjny przy nieudanej próbie otwarcia
kolejnego pliku.





Jasio

Posted: 10 Lut 2010 21:41:02



Sprawdź przy pomocy programu strace, czy rzeczywiście pliki są zamykane,
oraz jaki błąd zwraca system operacyjny przy nieudanej próbie otwarcia
kolejnego pliku.

strace pokazał: EMFILE (Too many open files).

Ale przy okazji wyszło szydło z worka: otóż zupełnie zapomniałem, że
każdy obiekt otwierał w konstruktorze osobny plik logu, w którym miał
rejestrować swoje działania. No i to wyczerpało pulę...

Wielkie dzięki za pomoc.

--
Pozdrawiam,

(js).




Twoja wypowiedź

Bold Style  Italic Style  Underlined Style  Image Link  Insert URL  Email Link  Wyłącz BB code


Zanim wyślesz jakąś wiadomość z polskimi znakami, upewnij się czy kodowanie znaków w twojej przeglądarce to ISO-8859-2
 » Login  » Hasło 
 


Czas ładowania strony (sek.): 0.404 users

miniBB.net © 2001-2010 | Polityka Prywatności
e-giełdy + opisy gg + kumy fubi ° oko na maroko ° nimda °

Online: Odwiedzający - 1
+ - 0
Najwięcej odwiedzających: 68 [1 Sty 2010 19:23:09]
Odwiedzający - 68 / + - 0
dieta herbalife tłumaczenia angielski warszawa kasyna meble kuchenne merkury meble kuchenne turyn
  spis stron|| ksiegarnia internetowa|| Forum|| gry dla dzieci|| microsoft word pobierz|| konto bankowe|| nagrzewnice|| Super Opisy

  • Internetowi giganci przeciwko odcinaniu piratów od Sieci
  • Największe korporacje oferujące swoje usługi przez Internet wysłali list otwarty do rządu Wielkiej Brytanii, w którym to krytykują pomysł odcinania piratów od Sieci.
  • Wielu nowych bohaterów w drugiej części Arkham Asylum
  • Batman: Arkham Asylum doczeka się kontynuacji. W drugiej części znakomitej produkcji o człowieku-nietoperzu spotkamy nowe postacie z komiksowego uniwersum.
  • Nvidia jest gotowa na sądową wojnę z Intelem
  • Dyrektor generalny Nvidii nie boi się elektronicznego giganta z Santa Clara. W przeprowadzonym wywiadzie przyznaje się, że czeka z niecierpliwością na sądową batalię.
  • Gra muzyczna z prawdziwą gitarą elektryczną
  • Power Gig: Rise of the Sixtring nie jest typowym klonem Guitar Hero. Gra bowiem jest obsługiwana przez prawdziwą gitarę zamiast plastikowego kontrolera.
  • Talibowie lubią iPhone'a?
  • iPhone jest nie tylko ulubionym gadżetem wrednej, imperialistycznej i pogańskiej Ameryki. Jak się okazuje, palmofon Apple'a jest lubiany również przez Talibów.