“несоответствующий ioctl для устройства”

Синтаксис "избранная вершина (@var)..." только работает в SQL-СЕРВЕРЕ 2005 +. Для SQL 2000 можно сделать:

set rowcount @top

select * from sometable

set rowcount 0 

Hope это помогает

Oisin.

(отредактированный для замены @@ rowcount rowcount - благодарит augustlights)

49
задан Christopher Bottoms 28 March 2016 в 07:33
поделиться

5 ответов

Скорее всего, это означает, что открытый не завершился ошибкой .

Когда Perl открывает файл, он проверяет, является ли файл TTY (чтобы он мог ответить на оператор -T $ fh filetest), выдача TCGETS ioctl против него. Если файл является обычным файлом, а не tty, ioctl завершается ошибкой и устанавливает значение errno равным ENOTTY (строковое значение: «Несоответствующий ioctl для устройства»). Как сказано в ysth, наиболее распространенной причиной появления неожиданного значения в $! является проверка его, когда оно недействительно, то есть где угодно другое , чем сразу после сбоя системного вызова, поэтому критически важно проверять коды результатов ваших операций.

Если open действительно вернул вам false, и вы нашли ENOTTY в $! , то я бы посчитал это небольшой ошибкой (дающей бесполезное значение of $! ), но мне также было бы очень любопытно, как это произошло. Код и / или выход фермы будут отличными.

37
ответ дан 7 November 2019 в 11:49
поделиться

«Несоответствующий ioctl для устройства» - это строка ошибки для ошибки ENOTTY. Раньше он запускался в первую очередь при попытках настроить свойства терминала (например, режим эха) для дескриптора файла, который не был терминалом (а, скажем, обычным файлом), следовательно, ENOTTY. В более общем смысле, он запускается при выполнении ioctl на устройстве, которое не поддерживает этот ioctl, отсюда и строка с ошибкой.

Чтобы узнать, какой ioctl не работает и на каком дескрипторе файла, запустите сценарий под strace / ферма. Вы узнаете ENOTTY, а затем фактическую печать сообщения об ошибке. Затем выясните, какой номер файла использовался и какой вызов open () вернул этот номер файла.

4
ответ дан 7 November 2019 в 11:49
поделиться

«файлы» в системах типов * nix - это очень абстрактное понятие.

Они могут быть областями на диске, организованными файловой системой, но они также могут быть сетевым подключением, небольшим количеством разделяемой памяти, вывод буфера из другого процесса,

5
ответ дан 7 November 2019 в 11:49
поделиться

Странные ошибки, такие как «несоответствующий ioctl для устройства», обычно являются результатом проверки $! в какой-то момент, кроме как сразу после сбоя системного вызова. Если бы вы показали свой код, держу пари, что кто-то быстро укажет на вашу ошибку.

21
ответ дан 7 November 2019 в 11:49
поделиться

Момент эврики!

У меня раньше была эта ошибка.

Вы вызывали отладчик perl с чем-то вроде: -

perl -d yourprog.pl > log.txt

Если это так, то отладка perl пытается запросить и, возможно, сбросить ширину терминала. Когда stdout не является терминалом, это не срабатывает с сообщением IOCTL.

В качестве альтернативы ваш сеанс отладки может зависнуть навсегда, потому что вы не видите приглашения для инструкций.

2
ответ дан 7 November 2019 в 11:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: