Здравствуйте, ononim, Вы писали:
skl>>Но стоит использовать линуксовые функции open/read/close (не важно блокируемые или нет), то начинаются проблемы, почему-то именно падает на close(). O>а если писать не close(fd) а ::close(fd)?
Этот способ с ::close(fd) заработал, т. е. в segmentation не падает и дескрипторы вроде в системе не исчерпываются.
Не понял только я в чем тут суть?
Однако при этом в буфер после чтения почему-то ничего не попадает, т. е. одни нули.
Я пробовал также делать и ::open() и ::read(), но все равно в буфере нули.
А если же при этом способе убрать флаг NONBLOCK, то нормально буфер заполняется принятыми данными, но read естественно становится блокируемым.
Что еще можете предложить?
Re[9]: Непонятная ошибка при закрытии дескриптора файла
Здравствуйте, Pzz, Вы писали:
Pzz>Здравствуйте, skl, Вы писали:
Pzz>>>Понять, где конкретно падает. Например, с помощью core dump'а.
skl>>Была бы core, то может быть.
Pzz>ulimit -c unlimited
Нет core с этой командой и без нее. Даже "find / -name *core*" по всей системе делал после segmentation failure — нету core нигде. Это надо где-то в настройках искать непонятно где, может быть ядро перекомпилировать. И вообще с отладчиком и дурак может, а вы интуицую и свой жизненный опыт проявите, если так посодействовать хотите, чтобы найти решение. Вот ononim кое-что подсказал про ::close() — уже что-то хотя и не решает полностью проблему.
Re[7]: Непонятная ошибка при закрытии дескриптора файла
skl>>>Но стоит использовать линуксовые функции open/read/close (не важно блокируемые или нет), то начинаются проблемы, почему-то именно падает на close(). O>>а если писать не close(fd) а ::close(fd)? skl>Этот способ с ::close(fd) заработал, т. е. в segmentation не падает и дескрипторы вроде в системе не исчерпываются. skl>Не понял только я в чем тут суть?
В том что у класса FromFtpForm видимо есть метод close и вы вызывали его, а не системный close
skl>Однако при этом в буфер после чтения почему-то ничего не попадает, т. е. одни нули. skl>Я пробовал также делать и ::open() и ::read(), но все равно в буфере нули.
потому что NONBLOCK так работает — если читать нечего то он ничего и не читает
skl>Что еще можете предложить?
Подумать над тем что выше написал.
Как много веселых ребят, и все делают велосипед...
Re[8]: Непонятная ошибка при закрытии дескриптора файла
Здравствуйте, ononim, Вы писали:
skl>>>>Но стоит использовать линуксовые функции open/read/close (не важно блокируемые или нет), то начинаются проблемы, почему-то именно падает на close(). O>>>а если писать не close(fd) а ::close(fd)? skl>>Этот способ с ::close(fd) заработал, т. е. в segmentation не падает и дескрипторы вроде в системе не исчерпываются. skl>>Не понял только я в чем тут суть? O>В том что у класса FromFtpForm видимо есть метод close и вы вызывали его, а не системный close
Класс FromFtpForm — это мой класс, но унаследован от QT-класса. Деструктор FromFtpForm пустой задан.
skl>>Однако при этом в буфер после чтения почему-то ничего не попадает, т. е. одни нули. skl>>Я пробовал также делать и ::open() и ::read(), но все равно в буфере нули. O>потому что NONBLOCK так работает — если читать нечего то он ничего и не читает
Почему нечего читать? Я передаю данные на USB — но они в буфер не попадают, а если NONBLOCK убрать, то тогда попадают.
Re[9]: Непонятная ошибка при закрытии дескриптора файла
skl>Почему нечего читать? Я передаю данные на USB — но они в буфер не попадают, а если NONBLOCK убрать, то тогда попадают.
Это значит, что в момент записи, запись невозможна. При блокируемой записи засыпаем, пока
запись не станет возможной. При неблокируемой-возвращаемся. Вообще, что-то у Вас нет проверки
результата выполнения
Здравствуйте, smeeld, Вы писали:
S>Здравствуйте, skl, Вы писали:
skl>>Почему нечего читать? Я передаю данные на USB — но они в буфер не попадают, а если NONBLOCK убрать, то тогда попадают.
S>Это значит, что в момент записи, запись невозможна. При блокируемой записи засыпаем, пока S>запись не станет возможной. При неблокируемой-возвращаемся. Вообще, что-то у Вас нет проверки S>результата выполнения S>
skl>>>>>Но стоит использовать линуксовые функции open/read/close (не важно блокируемые или нет), то начинаются проблемы, почему-то именно падает на close(). O>>>>а если писать не close(fd) а ::close(fd)? skl>>>Этот способ с ::close(fd) заработал, т. е. в segmentation не падает и дескрипторы вроде в системе не исчерпываются. skl>>>Не понял только я в чем тут суть? O>>В том что у класса FromFtpForm видимо есть метод close и вы вызывали его, а не системный close skl>Класс FromFtpForm — это мой класс, но унаследован от QT-класса. Деструктор FromFtpForm пустой задан.
Значит — ищите close в том у кого отнаследовались. В принципе еще есть вариант подтягивания close из какого нить неймспейса из текущих using namespace
skl>>>Однако при этом в буфер после чтения почему-то ничего не попадает, т. е. одни нули. skl>>>Я пробовал также делать и ::open() и ::read(), но все равно в буфере нули. O>>потому что NONBLOCK так работает — если читать нечего то он ничего и не читает skl>Почему нечего читать? Я передаю данные на USB — но они в буфер не попадают, а если NONBLOCK убрать, то тогда попадают.
Я думаю они у вас попадают и тогда и тогда, просто в случае nonblocking чтения вы их не замечаете за кучей нулевых чтений ибо не проверяете код возврата read'а
Как много веселых ребят, и все делают велосипед...
Re[11]: Непонятная ошибка при закрытии дескриптора файла
Вообще-то errno обнулять не нужно. Если write() завершается с ошибкой, то errno будет соответствующим. Если write() завершается нормально, errno проверять нельзя, ибо оно может быть каким угодно.
Re[12]: Непонятная ошибка при закрытии дескриптора файла