Re[8]: Непонятная ошибка при закрытии дескриптора файла
От: skl  
Дата: 30.09.14 04:13
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Понять, где конкретно падает. Например, с помощью core dump'а.


Была бы core, то может быть.
Re[6]: Непонятная ошибка при закрытии дескриптора файла
От: skl  
Дата: 30.09.14 04:18
Оценка: :)
Здравствуйте, ononim, Вы писали:

skl>>Но стоит использовать линуксовые функции open/read/close (не важно блокируемые или нет), то начинаются проблемы, почему-то именно падает на close().

O>а если писать не close(fd) а ::close(fd)?

Этот способ с ::close(fd) заработал, т. е. в segmentation не падает и дескрипторы вроде в системе не исчерпываются.
Не понял только я в чем тут суть?

Однако при этом в буфер после чтения почему-то ничего не попадает, т. е. одни нули.

Я пробовал также делать и ::open() и ::read(), но все равно в буфере нули.

А если же при этом способе убрать флаг NONBLOCK, то нормально буфер заполняется принятыми данными, но read естественно становится блокируемым.

Что еще можете предложить?
Re[9]: Непонятная ошибка при закрытии дескриптора файла
От: Pzz Россия https://github.com/alexpevzner
Дата: 30.09.14 05:41
Оценка:
Здравствуйте, skl, Вы писали:

Pzz>>Понять, где конкретно падает. Например, с помощью core dump'а.


skl>Была бы core, то может быть.


ulimit -c unlimited
Re[10]: Непонятная ошибка при закрытии дескриптора файла
От: skl  
Дата: 30.09.14 06:52
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Здравствуйте, skl, Вы писали:


Pzz>>>Понять, где конкретно падает. Например, с помощью core dump'а.


skl>>Была бы core, то может быть.


Pzz>ulimit -c unlimited


Нет core с этой командой и без нее. Даже "find / -name *core*" по всей системе делал после segmentation failure — нету core нигде. Это надо где-то в настройках искать непонятно где, может быть ядро перекомпилировать. И вообще с отладчиком и дурак может, а вы интуицую и свой жизненный опыт проявите, если так посодействовать хотите, чтобы найти решение. Вот ononim кое-что подсказал про ::close() — уже что-то хотя и не решает полностью проблему.
Re[7]: Непонятная ошибка при закрытии дескриптора файла
От: ononim  
Дата: 30.09.14 07:54
Оценка:
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]: Непонятная ошибка при закрытии дескриптора файла
От: skl  
Дата: 30.09.14 08:29
Оценка:
Здравствуйте, 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]: Непонятная ошибка при закрытии дескриптора файла
От: smeeld  
Дата: 30.09.14 08:46
Оценка:
Здравствуйте, skl, Вы писали:


skl>Почему нечего читать? Я передаю данные на USB — но они в буфер не попадают, а если NONBLOCK убрать, то тогда попадают.


Это значит, что в момент записи, запись невозможна. При блокируемой записи засыпаем, пока
запись не станет возможной. При неблокируемой-возвращаемся. Вообще, что-то у Вас нет проверки
результата выполнения
errno=0;
size_t sz=write(fd....);
if(sz<0) if(errno!=EAGAIN) close(fd);
           else to_further();


while(errno==EAGAIN){ write(...); } не предлагаю, потому-то можно зацикливаться надолго.
Re[10]: Непонятная ошибка при закрытии дескриптора файла
От: skl  
Дата: 30.09.14 08:51
Оценка:
Здравствуйте, smeeld, Вы писали:

S>Здравствуйте, skl, Вы писали:



skl>>Почему нечего читать? Я передаю данные на USB — но они в буфер не попадают, а если NONBLOCK убрать, то тогда попадают.


S>Это значит, что в момент записи, запись невозможна. При блокируемой записи засыпаем, пока

S>запись не станет возможной. При неблокируемой-возвращаемся. Вообще, что-то у Вас нет проверки
S>результата выполнения
S>
S>errno=0;
S>size_t sz=write(fd....);
S>if(sz<0) if(errno!=EAGAIN) close(fd);
S>           else to_further();  
S>


S>while(errno==EAGAIN){ write(...); } не предлагаю, потому-то можно зацикливаться надолго.


Причем здесь запись? Я читаю только из /dev/ttyACM0.
Re[11]: Непонятная ошибка при закрытии дескриптора файла
От: smeeld  
Дата: 30.09.14 09:01
Оценка:
Здравствуйте, skl, Вы писали:

skl>Причем здесь запись? Я читаю только из /dev/ttyACM0.


С чтением то же самое с точностью до write->read.
Re[9]: Непонятная ошибка при закрытии дескриптора файла
От: ononim  
Дата: 30.09.14 09:30
Оценка:
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]: Непонятная ошибка при закрытии дескриптора файла
От: rising_edge  
Дата: 30.09.14 11:00
Оценка:
Здравствуйте, skl, Вы писали:

S>>
S>>errno=0;
S>>size_t sz=write(fd....);
S>>if(sz<0) if(errno!=EAGAIN) close(fd);
S>>           else to_further();  
S>>

Вообще-то errno обнулять не нужно. Если write() завершается с ошибкой, то errno будет соответствующим. Если write() завершается нормально, errno проверять нельзя, ибо оно может быть каким угодно.
Re[12]: Непонятная ошибка при закрытии дескриптора файла
От: smeeld  
Дата: 30.09.14 11:06
Оценка:
Здравствуйте, rising_edge, Вы писали:

_>Здравствуйте, skl, Вы писали:


S>>>
S>>>errno=0;
S>>>size_t sz=write(fd....);
S>>>if(sz<0) if(errno!=EAGAIN) close(fd);
S>>>           else to_further();  
S>>>


_>Вообще-то errno обнулять не нужно.


Вообще-то желательно. В системных либах косяков много.

> Если write() завершается нормально, errno проверять нельзя, ибо оно может быть каким угодно.


if(sz<0) не видно?
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.