С новичёк
Модератор: Модераторы разделов
Re: С новичёк
можно еще странных вопросов позадовать?
0. как можно спрятать курсор в терминале?
1. как программно перейти в нужный виртуальный терминал (т.е. аналогично (Ctrl+)Alt+F{число}). если это не возможно - как отэмулировать нажатие этих клавиш?
0. как можно спрятать курсор в терминале?
1. как программно перейти в нужный виртуальный терминал (т.е. аналогично (Ctrl+)Alt+F{число}). если это не возможно - как отэмулировать нажатие этих клавиш?
Re: С новичёк
Нолевое сам послушаю с интересом - что-то когда-то давно в ncurses доках не увидел... хотя для конкретных разновидностей терминалов наверняка это возможно (если работать напрямую).
Первое - если подумать - невозможно или не должно быть стандартно-возможно. Иначе вы получите вооотакенную дыру в секьюрити. (Напряглись немного и представили: запущенная вами программа "сэмулировав нажатия" перелистала терминалы, нашла тот, что под рутом, и "сэмулировала" там что-нить вроде ввода rm -R /* (Enter)... Вспомнили великую шутку виндовс с посылкой сообщения таймера любому окну...
Debian GNU/Linux 4 -- AMD Athlon64 3000+ / Asus 7600GS -- Gnome
Debian GNU/Linux 5 -- Dell (Vostro) 500 (Celeron M560 / iGM965) -- Gnome
Debian GNU/Linux 5 -- Dell (Vostro) 500 (Celeron M560 / iGM965) -- Gnome
Re: С новичёк
sergio писал(а): ↑01.09.2007 19:00Первое - если подумать - невозможно или не должно быть стандартно-возможно. Иначе вы получите вооотакенную дыру в секьюрити. (Напряглись немного и представили: запущенная вами программа "сэмулировав нажатия" перелистала терминалы, нашла тот, что под рутом, и "сэмулировала" там что-нить вроде ввода rm -R /* (Enter)... Вспомнили великую шутку виндовс с посылкой сообщения таймера любому окну...
Мне просто нужно сделать программку-костыль, которая:
- либо погасила курсор на на 7-м терминале
- либо сделала переход сначала, скажем, на 1-й а потом на 7-й
видимо лучше просто курсор погасить, вопрос только "как"...
Re: С новичёк
Pr0b3L писал(а): ↑24.09.2007 16:40Мне просто нужно сделать программку-костыль
Понадобилось мне этого, потому что если после hibernate (пере)запустить иксы, то я вижу (предположительно) наложенный с 7-го терминала курсор (прямо в иксах 0_o). Не приятно выглядит эта мигающая хрень. А если временно переключиться на другой терминал и снова вернуться на 7-й -- все в порядке, никакого курсора.
Честно говоря мало что понял, и совсем не понял как терминальный курсор может оказаться на иксовом окне... Обычный консольные терминалы я думаю рутом можно от/при-соединить к экрану или переключить, но как - тут я не помощник. Но по-моему надо разбираться с ситуацией, может вы страшный баг отыскали , звучит как-то то ли непонятно , то ли дико. Варианты с прятаньем курсора и впрямь костыли какие-то, лучше бы понять, что там происходит.
Debian GNU/Linux 4 -- AMD Athlon64 3000+ / Asus 7600GS -- Gnome
Debian GNU/Linux 5 -- Dell (Vostro) 500 (Celeron M560 / iGM965) -- Gnome
Debian GNU/Linux 5 -- Dell (Vostro) 500 (Celeron M560 / iGM965) -- Gnome
Re: С новичёк
Можно попробовать echo -e '\33[?1c' в баше
Сам к сожалению не имею возможности проверить, так как из-за глюкавых дровов nvidia я заперт в иксах под страхом зависания системы...
Сам к сожалению не имею возможности проверить, так как из-за глюкавых дровов nvidia я заперт в иксах под страхом зависания системы...
От Кузбаса и до Затулинки, от вершин до глубиннейших руд
Анархисты Сибирской Республики нас к предельной свободе ведут
Анархисты Сибирской Республики нас к предельной свободе ведут
Re: С новичёк
точнее вот так printf "33[?1c" чертвов форум, опять режит символы. напишу через пробелы:
Код: Выделить всё
\ 0 3 3 [ ? 1 c
кстати, может и не в тему, но где можно полное руководство по всем этим терминальным последовательностям найти (или как их назвать правильно)?
- Uncle_Theodore
- Сообщения: 3339
- ОС: Slackware 12.2, ArchLinux 64
Re: С новичёк
Извиняюсь за ламерский вопрос. Изучаю Си по книге Кернигана. На примерах на сайте www.cplusplus.com (да и везде) основной текст проги начинается так
,
а в книге Кернигана int перед main нету. И у меня возник такой вопрос. Зачем ставить int перед main? Ведь main не переменная, а основная (на языке Си) функция. Это только на Паскале можно было давать тип данных функциям.
Код: Выделить всё
int main ()
{
/*текст проги*/
}
а в книге Кернигана int перед main нету. И у меня возник такой вопрос. Зачем ставить int перед main? Ведь main не переменная, а основная (на языке Си) функция. Это только на Паскале можно было давать тип данных функциям.
Re: С новичёк
Это тип возвращаемого значения. Положено так. По уставу.
Зачем хорёк пошел в ларёк, зачем барсук полез на сук...
Мораль легко уразуметь: зачем на бал пришёл медведь?
Мораль легко уразуметь: зачем на бал пришёл медведь?
Re: С новичёк
Вообще говоря, я где-то описывал эту фишку с возвращаемыми значениями main в C и C++, поищи по форуму.
- drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
- Контактная информация:
Re: С новичёк
это то, что функция возвращает. Причём если тип == int можно его неписать, к примеру unsigned int тоже, что и unsigned. Именно поэтому main() воспринимается компилятором как int main(). Керниган считал, что каждая программа должна выдавать код завершения, это для него было само-собой разумеющееся, вот он и не писал int.
Re: С новичёк
Чучок писал(а): ↑11.11.2007 17:33Извиняюсь за ламерский вопрос. Изучаю Си по книге Кернигана. На примерах на сайте www.cplusplus.com (да и везде) основной текст проги начинается так
,Код: Выделить всё
int main () { /*текст проги*/ }
а в книге Кернигана int перед main нету. И у меня возник такой вопрос. Зачем ставить int перед main? Ведь main не переменная, а основная (на языке Си) функция. Это только на Паскале можно было давать тип данных функциям.
Если для функции не указывается возвращаемый тип, он по умолчанию считается равным int.
Re: С новичёк
Лучше писать, а то греха потом не оберёшься. Я вот написал однажды функцию
И она работала. До поры до времени. А потом я эту функцию вставил в программу среди перечня других функций. И всё, программа не заработала. Пока ошибку нашёл, время потерял. Оказалось, необходимо было всё-таки так писать:
Так что лучше не пренебрегать правилами.
Код: Выделить всё
a (char b []) {
//Функция изменяла массив b
}
И она работала. До поры до времени. А потом я эту функцию вставил в программу среди перечня других функций. И всё, программа не заработала. Пока ошибку нашёл, время потерял. Оказалось, необходимо было всё-таки так писать:
Код: Выделить всё
void a (char b []) {
//Функция изменяла массив b
}
Так что лучше не пренебрегать правилами.
Зачем хорёк пошел в ларёк, зачем барсук полез на сук...
Мораль легко уразуметь: зачем на бал пришёл медведь?
Мораль легко уразуметь: зачем на бал пришёл медведь?
Re: С новичёк
так если перед функцией ничего нестоит. ТО по-умолчанию это void функция или же int? или если это main - то это int, а для всех остальных - void.
Интересует для C++
Интересует для C++
- drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
- Контактная информация:
Re: С новичёк
int. Всегда подразумевается тип int если явно не указано иное: например unsigned на самом деле unsigned int. А мой компилятор ругается на такие функции(warning: data definition has no type or storage class), но программу собирает
Re: С новичёк
Согласно стандарту тип возвращаемого функцией значения нужно всегда указывать явно. То есть отсутствие такого указания является ошибкой.
Например, вот такой код:
компилятор, соответствующий стандарту, не скомпилирует. Я пробовал на Dev-C++ ввести такой код (там стоит g++ 3.4.2) - не пропускает, выдает сообщение об ошибке:
ISO C++ forbids declaration of `f' with no type
Я решил попробовать даже так, как будто бы f() должна что-то вернуть:
Та же ошибка.
Так что против стандарта не попрешь...
Кстати, перед main() всегда нужно ставить int. Всегда! А у Кернигана main() стоит без указания типа возвращаемого значения потому, что, когда писалась его книга, стандарта еще не было.
Например, вот такой код:
Код: Выделить всё
#include <iostream>
using namespace std;
f() { cout << "f()" << endl; }
int main()
{
f();
return 0;
}
ISO C++ forbids declaration of `f' with no type
Я решил попробовать даже так, как будто бы f() должна что-то вернуть:
Код: Выделить всё
#include <iostream>
using namespace std;
f() { return 1; }
int main()
{
int i = f();
return 0;
}
Так что против стандарта не попрешь...
Кстати, перед main() всегда нужно ставить int. Всегда! А у Кернигана main() стоит без указания типа возвращаемого значения потому, что, когда писалась его книга, стандарта еще не было.
Re: С новичёк
А вот функции-конструкторы класа должны быть типом? ибо в книгах пишется без типа. ПРосто Nameofclass::Nameofclass() { }, без типа. По стандарту это правильно?
- Uncle_Theodore
- Сообщения: 3339
- ОС: Slackware 12.2, ArchLinux 64
Re: С новичёк
У конструкторов Вы тип не указываете. На то они и конструкторы...
- drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
- Контактная информация:
Re: С новичёк
А у меня gcc version 4.1.2 20070302 (prerelease) (4.1.2-1mdv2007.1) И такое собирает, но с warning: data definition has no type or storage class. Что конечно не говорит о том, что так можно и нужно делать.
Конечно!
KukMan, У конструкторов нет типа возвращаемого значения, потому-что они ничего не возвращают. И у деструкторов - тоже. Это связано с тем, что они обычно вызываются не явно:
Код: Выделить всё
class test;
{
test x;//вызывается конструктор, непонятно кому и что возвращать.
}//вызывается деструктор, куда деть информацию возврата?
Re: С новичёк
(drBatty) писал(а):А у меня gcc version 4.1.2 20070302 (prerelease) (4.1.2-1mdv2007.1) И такое собирает, но с warning: data definition has no type or storage class. Что конечно не говорит о том, что так можно и нужно делать.
Очень странно... Стандартный компилятор должен в этом случае выдавать именно ошибку, это точно! Неявный int был обусловлен совместимостью с НЕстандартным С (еще до 1989 года). А теперь тип возвращаемого значения надо указывать обязательно!
Не понимаю... Вроде gcc 2007 года должен поддерживать стандарт по умолчанию...
Re: С новичёк
Абсолютно правильно. Причем нельзя написать конструктор с указанием типа возвращаемого значения void. Этим конструктор (да и деструктор тоже) отличаются от функций, возвращающих void.
- drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
- Контактная информация:
Re: С новичёк
Прошу прощения. Это я вас запутал. Компилятор я указал правильно, но вот запускал я его как cc, и программа была на языке c, а вовсе не на cpp. Несмотря на внешнюю похожесть эти языки совершенно разные. В Си, например, допускается такая запись. А gcc и тексты на fortran'е умеет компилировать
Re: С новичёк
Да, действительно, такая форма записи в С допустима. К сожалению... Что делать, совместимость со старой версией языка диктует свои правила.