С новичёк

Модератор: Модераторы разделов

sbar
Сообщения: 354
ОС: Gentoo

Re: С новичёк

Сообщение sbar »

можно еще странных вопросов позадовать?
0. как можно спрятать курсор в терминале?
1. как программно перейти в нужный виртуальный терминал (т.е. аналогично (Ctrl+)Alt+F{число}). если это не возможно - как отэмулировать нажатие этих клавиш?
Спасибо сказали:
sergio
Сообщения: 436
Статус: Интересующийся новичок
ОС: Debian GNU/Linux 4 & 5

Re: С новичёк

Сообщение sergio »

Pr0b3L писал(а):
28.08.2007 15:54
можно еще странных вопросов позадовать?
0. как можно спрятать курсор в терминале?
1. как программно перейти в нужный виртуальный терминал (т.е. аналогично (Ctrl+)Alt+F{число}). если это не возможно - как отэмулировать нажатие этих клавиш?

Нолевое сам послушаю с интересом - что-то когда-то давно в ncurses доках не увидел... хотя для конкретных разновидностей терминалов наверняка это возможно (если работать напрямую).
Первое - если подумать - невозможно или не должно быть стандартно-возможно. Иначе вы получите вооотакенную дыру в секьюрити. (Напряглись немного и представили: запущенная вами программа "сэмулировав нажатия" перелистала терминалы, нашла тот, что под рутом, и "сэмулировала" там что-нить вроде ввода rm -R /* (Enter)... Вспомнили великую шутку виндовс с посылкой сообщения таймера любому окну... :happy:
Debian GNU/Linux 4 -- AMD Athlon64 3000+ / Asus 7600GS -- Gnome
Debian GNU/Linux 5 -- Dell (Vostro) 500 (Celeron M560 / iGM965) -- Gnome
Спасибо сказали:
sbar
Сообщения: 354
ОС: Gentoo

Re: С новичёк

Сообщение sbar »

sergio писал(а):
01.09.2007 19:00
Первое - если подумать - невозможно или не должно быть стандартно-возможно. Иначе вы получите вооотакенную дыру в секьюрити. (Напряглись немного и представили: запущенная вами программа "сэмулировав нажатия" перелистала терминалы, нашла тот, что под рутом, и "сэмулировала" там что-нить вроде ввода rm -R /* (Enter)... Вспомнили великую шутку виндовс с посылкой сообщения таймера любому окну... :happy:

Мне просто нужно сделать программку-костыль, которая:
  • либо погасила курсор на на 7-м терминале
  • либо сделала переход сначала, скажем, на 1-й а потом на 7-й
Понадобилось мне этого, потому что если после hibernate (пере)запустить иксы, то я вижу (предположительно) наложенный с 7-го терминала курсор (прямо в иксах 0_o). Не приятно выглядит эта мигающая хрень. А если временно переключиться на другой терминал и снова вернуться на 7-й -- все в порядке, никакого курсора. Если загрузиться нормально, без hibernate, то тоже все нормально, можно сколько угодно раз иксы запускать и курсора не будет вылезать.
видимо лучше просто курсор погасить, вопрос только "как"...
Спасибо сказали:
sergio
Сообщения: 436
Статус: Интересующийся новичок
ОС: Debian GNU/Linux 4 & 5

Re: С новичёк

Сообщение sergio »

Pr0b3L писал(а):
24.09.2007 16:40
Мне просто нужно сделать программку-костыль
Понадобилось мне этого, потому что если после hibernate (пере)запустить иксы, то я вижу (предположительно) наложенный с 7-го терминала курсор (прямо в иксах 0_o). Не приятно выглядит эта мигающая хрень. А если временно переключиться на другой терминал и снова вернуться на 7-й -- все в порядке, никакого курсора.

Честно говоря мало что понял, и совсем не понял как терминальный курсор может оказаться на иксовом окне... Обычный консольные терминалы я думаю рутом можно от/при-соединить к экрану или переключить, но как - тут я не помощник. Но по-моему надо разбираться с ситуацией, может вы страшный баг отыскали :) , звучит как-то то ли непонятно , то ли дико. Варианты с прятаньем курсора и впрямь костыли какие-то, :happy: лучше бы понять, что там происходит.
Debian GNU/Linux 4 -- AMD Athlon64 3000+ / Asus 7600GS -- Gnome
Debian GNU/Linux 5 -- Dell (Vostro) 500 (Celeron M560 / iGM965) -- Gnome
Спасибо сказали:
Upliner
Сообщения: 67
ОС: openSUSE 11 / Debian Lenny
Контактная информация:

Re: С новичёк

Сообщение Upliner »

Можно попробовать echo -e '\33[?1c' в баше
Сам к сожалению не имею возможности проверить, так как из-за глюкавых дровов nvidia я заперт в иксах под страхом зависания системы...
От Кузбаса и до Затулинки, от вершин до глубиннейших руд
Анархисты Сибирской Республики нас к предельной свободе ведут
Спасибо сказали:
sbar
Сообщения: 354
ОС: Gentoo

Re: С новичёк

Сообщение sbar »

Upliner писал(а):
24.09.2007 22:55
Можно попробовать echo -e '33[?1c' в баше
точнее вот так printf "33[?1c" чертвов форум, опять режит символы. напишу через пробелы:

Код: Выделить всё

 \ 0 3 3 [ ? 1 c
:) big thx!
кстати, может и не в тему, но где можно полное руководство по всем этим терминальным последовательностям найти (или как их назвать правильно)?
Спасибо сказали:
Аватара пользователя
Чучок
Сообщения: 390
ОС: Debian 4.0 etch

Re: С новичёк

Сообщение Чучок »

Извиняюсь за ламерский вопрос. Изучаю Си по книге Кернигана. На примерах на сайте www.cplusplus.com (да и везде) основной текст проги начинается так

Код: Выделить всё

int main ()
{
      /*текст проги*/
}
,
а в книге Кернигана int перед main нету. И у меня возник такой вопрос. Зачем ставить int перед main? Ведь main не переменная, а основная (на языке Си) функция. Это только на Паскале можно было давать тип данных функциям.
Спасибо сказали:
Аватара пользователя
Liksys
Сообщения: 2910

Re: С новичёк

Сообщение Liksys »

Это возвращаемое значение функции.
Спасибо сказали:
promov
Сообщения: 384
Статус: Участник
ОС: Debian GNU/Linux

Re: С новичёк

Сообщение promov »

Это тип возвращаемого значения. Положено так. По уставу.
Зачем хорёк пошел в ларёк, зачем барсук полез на сук...
Мораль легко уразуметь: зачем на бал пришёл медведь?
Спасибо сказали:
Аватара пользователя
Liksys
Сообщения: 2910

Re: С новичёк

Сообщение Liksys »

Вообще говоря, я где-то описывал эту фишку с возвращаемыми значениями main в C и C++, поищи по форуму.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Контактная информация:

Re: С новичёк

Сообщение drBatty »

Чучок писал(а):
11.11.2007 17:33
Извиняюсь за ламерский вопрос. Изучаю Си по книге Кернигана. На примерах на сайте www.cplusplus.com (да и везде) основной текст проги начинается так
int main ()

это то, что функция возвращает. Причём если тип == int можно его неписать, к примеру unsigned int тоже, что и unsigned. Именно поэтому main() воспринимается компилятором как int main(). Керниган считал, что каждая программа должна выдавать код завершения, это для него было само-собой разумеющееся, вот он и не писал int.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
v04bvs
Сообщения: 636
ОС: Debian GNU/Linux

Re: С новичёк

Сообщение v04bvs »

Чучок писал(а):
11.11.2007 17:33
Извиняюсь за ламерский вопрос. Изучаю Си по книге Кернигана. На примерах на сайте www.cplusplus.com (да и везде) основной текст проги начинается так

Код: Выделить всё

int main ()
 {
       /*текст проги*/
 }
,
а в книге Кернигана int перед main нету. И у меня возник такой вопрос. Зачем ставить int перед main? Ведь main не переменная, а основная (на языке Си) функция. Это только на Паскале можно было давать тип данных функциям.

Если для функции не указывается возвращаемый тип, он по умолчанию считается равным int.
Спасибо сказали:
promov
Сообщения: 384
Статус: Участник
ОС: Debian GNU/Linux

Re: С новичёк

Сообщение promov »

Лучше писать, а то греха потом не оберёшься. Я вот написал однажды функцию

Код: Выделить всё

a (char b []) {
 //Функция изменяла массив b
}


И она работала. До поры до времени. А потом я эту функцию вставил в программу среди перечня других функций. И всё, программа не заработала. Пока ошибку нашёл, время потерял. Оказалось, необходимо было всё-таки так писать:

Код: Выделить всё

void a (char b []) {
 //Функция изменяла массив b
}


Так что лучше не пренебрегать правилами.
Зачем хорёк пошел в ларёк, зачем барсук полез на сук...
Мораль легко уразуметь: зачем на бал пришёл медведь?
Спасибо сказали:
KukMan
Сообщения: 92
ОС: Kubuntu 7.10

Re: С новичёк

Сообщение KukMan »

так если перед функцией ничего нестоит. ТО по-умолчанию это void функция или же int? или если это main - то это int, а для всех остальных - void.
Интересует для C++
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Контактная информация:

Re: С новичёк

Сообщение drBatty »

KukMan писал(а):
06.12.2007 15:31
так если перед функцией ничего нестоит.
int. Всегда подразумевается тип int если явно не указано иное: например unsigned на самом деле unsigned int. А мой компилятор ругается на такие функции(warning: data definition has no type or storage class), но программу собирает ;)
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
deninok
Сообщения: 585
Статус: Программист С++
ОС: Debian GNU/Linux
Контактная информация:

Re: С новичёк

Сообщение deninok »

Согласно стандарту тип возвращаемого функцией значения нужно всегда указывать явно. То есть отсутствие такого указания является ошибкой.
Например, вот такой код:

Код: Выделить всё

#include <iostream>
using namespace std;

f() { cout << "f()" << endl; }

int main()
{
    f();

    return 0;
}
компилятор, соответствующий стандарту, не скомпилирует. Я пробовал на Dev-C++ ввести такой код (там стоит g++ 3.4.2) - не пропускает, выдает сообщение об ошибке:
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() стоит без указания типа возвращаемого значения потому, что, когда писалась его книга, стандарта еще не было.
Спасибо сказали:
KukMan
Сообщения: 92
ОС: Kubuntu 7.10

Re: С новичёк

Сообщение KukMan »

А вот функции-конструкторы класа должны быть типом? ибо в книгах пишется без типа. ПРосто Nameofclass::Nameofclass() { }, без типа. По стандарту это правильно?
Спасибо сказали:
Аватара пользователя
Uncle_Theodore
Сообщения: 3339
ОС: Slackware 12.2, ArchLinux 64

Re: С новичёк

Сообщение Uncle_Theodore »

У конструкторов Вы тип не указываете. На то они и конструкторы...
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Контактная информация:

Re: С новичёк

Сообщение drBatty »

deninok писал(а):
06.12.2007 16:24
(там стоит g++ 3.4.2) - не пропускает, выдает сообщение об ошибке:
ISO C++ forbids declaration of `f' with no type
А у меня gcc version 4.1.2 20070302 (prerelease) (4.1.2-1mdv2007.1) И такое собирает, но с warning: data definition has no type or storage class. Что конечно не говорит о том, что так можно и нужно делать.

deninok писал(а):
06.12.2007 16:24
Кстати, перед main() всегда нужно ставить int. Всегда!
Конечно!

KukMan, У конструкторов нет типа возвращаемого значения, потому-что они ничего не возвращают. И у деструкторов - тоже. Это связано с тем, что они обычно вызываются не явно:

Код: Выделить всё

class test;

{
 test x;//вызывается конструктор, непонятно кому и что возвращать.
}//вызывается деструктор, куда деть информацию возврата?
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
deninok
Сообщения: 585
Статус: Программист С++
ОС: Debian GNU/Linux
Контактная информация:

Re: С новичёк

Сообщение deninok »

(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 года должен поддерживать стандарт по умолчанию...
Спасибо сказали:
Аватара пользователя
deninok
Сообщения: 585
Статус: Программист С++
ОС: Debian GNU/Linux
Контактная информация:

Re: С новичёк

Сообщение deninok »

KukMan писал(а):
06.12.2007 17:10
А вот функции-конструкторы класа должны быть типом? ибо в книгах пишется без типа. ПРосто Nameofclass::Nameofclass() { }, без типа. По стандарту это правильно?

Абсолютно правильно. Причем нельзя написать конструктор с указанием типа возвращаемого значения void. Этим конструктор (да и деструктор тоже) отличаются от функций, возвращающих void.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Контактная информация:

Re: С новичёк

Сообщение drBatty »

deninok писал(а):
06.12.2007 21:58
Очень странно... Стандартный компилятор должен в этом случае выдавать именно ошибку, это точно!
Прошу прощения. Это я вас запутал. Компилятор я указал правильно, но вот запускал я его как cc, и программа была на языке c, а вовсе не на cpp. Несмотря на внешнюю похожесть эти языки совершенно разные. В Си, например, допускается такая запись. А gcc и тексты на fortran'е умеет компилировать ;)
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
deninok
Сообщения: 585
Статус: Программист С++
ОС: Debian GNU/Linux
Контактная информация:

Re: С новичёк

Сообщение deninok »

Да, действительно, такая форма записи в С допустима. К сожалению... Что делать, совместимость со старой версией языка диктует свои правила.
Спасибо сказали:
Ответить