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.395 users

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

Online: Odwiedzający - 1
+ - 1 [ shipmezzi ]
Najwięcej odwiedzających: 68 [1 Sty 2010 19:23:09]
Odwiedzający - 68 / + - 0
zakłady sportowe hydraulik poznań wróżka Zbiór Omega Arcturus paraprotex
  SErr:128 || SErr:128

  • Samsung szykuje tablet z systemem Android 3.5
  • Podczas prezentacji na targach IFA 2010, przedstawiciel Samsunga ujawnił, że producent już pracuje nad nowym, większym tabletem z preinstalowanym systemem Android 3.5 Honeycomb.
  • 8-rdzeniowy procesor Orochi, wytworzony w technologii 32 nm
  • AMD ujawnia pierwsze informacje na temat swojego nowego, 8-rdzeniowego procesora Orochi, który zostanie wytworzony w 32-nanometrowej technologii i oparty na architekturze Bulldozer.
  • Blueconnect Compressor przyspiesza wyświetlanie witryn
  • PTC uruchomiła dla wszystkich abonentów blueconnect w komputerze specjalną, darmową usługę pozwalającą na przyspieszenie wyświetlania stron internetowych oraz zmniejszenie liczby potrzebnych do tego danych.
  • 12-megapikselowy, stylowy kompakt z nagrywaniem filmów Full HD
  • Sony dodaje do swojej oferty nowy aparat kompaktowy HD Bloggie, który potrafi rejestrować filmy w jakości Full HD, wykonywać zdjęcia w rozdzielczości 12 Megapikseli i kręcić w trybie 360 Video.
  • Niedrogi smartfon z Androidem 2.2 na pokładzie
  • Firma Huawei wprowadza na rynek nowy smartfon z systemem operacyjnym Google Android 2.2, którego największą zaletą ma być - przystępna cena.