c# — Консольные приложения — Stack Overflow на русском
Вопрос задан
Изменён 11 лет 4 месяца назад
Просмотрен 4k раза
Вот вопрос, во многих книгах которые я читаю, везде начинают обучение в консольных приложениях… но вот вопрос, почему именно в них, и второй Зачем воообще консольные приложения??
- c#
- console
3
Есть разные виды приложений и их классификаций. Одна из них: приложения бывают трансформирующие, интерактивные и реактивные (реального времени). Так вот, первые из них, трансформирующие, характеризуются тем, что берут данные на входе (упрощённо — входной файл), работают какое-то время, обязательно конечное, и выдают результаты (упрощённо — в выходной файл).
1
На самом деле, большинство приложений являются именно консольными или вообще не имеют пользовательского интерфейса. Сюда относятся различные серверные приложения, службы, трансформирующие приложения, упомянутые выше и т.д. и т.п.
Дело в том, что консоль — это всего лишь форма пользовательского интерфейса. И реализовать такой интерфейс обычно проще, чем графический. Основная логика программы не зависит от интерфейса, поэтому обучение эффективнее строить на консольных программах. Кроме того, консольные приложения проще тестировать и отлаживать.
Наконец, консольный интерфейс, часто оказывается удобнее и эффективнее графического. Просто современные пользователи не привыкли пользоваться консолью и не знают возможностей современных консолей. Почитайте книгу Джефа Раскина про интерфейсы. Там много про это говорится.
Учатся сначала на консольных приложениях, чтобы сначала понять основные принципы языка, основы синтаксиса и т.д. Основная работа в приложениях вообще идет за GUI, поэтому нужно сначала все это освоить, а построение GUI обычно стоит на тех же основных принципах, что и другие приложения: те же принципы ООП и т.д.
Не везде GUI нужен и не везде он полезен. Например, серверы. Да и в обычных программах он обычно используется для ввода и вывода каких-то данных, а вся обработка идет за кулисами. На серверах GUI будет тормозить работу, создаст лишние проблемы с безопасностью. Да и не нужен он там. И вообще, программ без GUI (скажем так шире) на самом деле много больше, чем с графическим интерфейсом.
Зарегистрируйтесь или войдите
Регистрация через Google
Регистрация через Facebook
Регистрация через почту
Отправить без регистрации
Почта
Необходима, но никому не показывается
Отправить без регистрации
Почта
Необходима, но никому не показывается
Нажимая на кнопку «Отправить ответ», вы соглашаетесь с нашими пользовательским соглашением, политикой конфиденциальности и политикой о кукиВиды программ
Что делать, чтобы стать программистом
Многие сегодня хотят стать программистами. Хотят. Но ничего не делают для этого. Не делают даже простых вещей. Не хотят даже прочитать книжку из 10 страниц. В итоге так и остаются никем. Потому что мечты не сбываются никогда. Сбываются только планы… Подробнее… |
Прежде чем создавать свои компьютерные программы, вы должны знать, какие они бывают и для чего предназначены. Видов программ не так много. Различия между программами можно назвать условными, так как по сути любая программа — это двоичный файл. Но мы так глубоко копать пока не будем, и поговорим о том, чем отличаются программы друг от друга с точки зрения пользователя.
Мы уже знаем, какие программы можно создавать в Lazarus. Но сегодня мы будем классифицировать программы с несколько иной точки зрения. Ниже перечислены основные виды программ с краткими описаниями.
Консольные приложения
Консольное приложение — это программа, которая работает с командной строкой. То есть это обычное окно, где пользователь может ввести какую-то команду и получить результат. Здесь нет никаких кнопочек и прочих прелестей Windows.
Пример консольного приложения — это командный интерпретатор, который есть в любой операционной системе. В Windows 95/98/ME — это программа command.com (впрочем, он есть и в более поздних версиях Windows). В Windows 2000 и выше — это программа cmd.exe.
Примеры работы с командной строкой см. в статье Кое что о ДОС.
Оконные приложения
Оконное приложение — это привычная всем программа Windows. То есть это окошко с разными кнопочками и полями для ввода-вывода данных. На сегодняшний день это, пожалуй, самый распространённый вид программ. Именно оконные приложения создают большинство программистов.
Драйверы
Драйвер — это программа, которая обычно служит для “стыковки” компьютерного железа (например, видеокарты) с операционной системой или другой программой. Иногда драйвером называют программу, которая “стыкует” две других программы между собой. Хотя сейчас такие программы принято называть интерфейсами (например, COM-интерфейс или DDE-интерфейс).
Когда я говорю “стыкует”, то я имею ввиду, что драйвер позволяет организовать правильный обмен данными между компьютерным железом и ОС. То есть операционная система обращается не напрямую к железу, а через драйвер.
Зачем так сделано? Дело в том, что производителей, например, видеокарт, существует огромное количество. И все они делают их по своим внутренним стандартам. И операционная система не может знать всё обо всех видеокартах. Поэтому есть определённые общепринятые стандарты, которые поддерживаются операционной системой. И производитель “железа” делает какую угодно “железяку”, а затем просто пишет программу-драйвер, которая соответствует общепринятым стандартам и “стыкует” эту “железяку” с операционной системой.
Это позволяет извращённым умам делать разные смешные штуки. Например, можно написать “кривой” драйвер, который будет определять USB-мышку как флэшку. Конечно, работать такая “флэшка” не будет, но зато будет прикольно)))
Интерфейсы
Интерфейс — это программа, которая обычно служит для “стыковки” одной программы с другой. Например, вы хотите получить данные из чужой программы. Как это сделать? Если чужая программа поддерживает какой-нибудь стандартный интерфейс (например, DDE), то вы можете использовать этот интерфейс для получения данных из чужой программы.
Библиотеки
Библиотека — это двоичный файл, который хранит разные методы и объекты. Пока это вам ни о чём не говорит. Но просто знайте, что свои процедуры вы можете сохранить в библиотеку, а затем использовать её в других своих программах. Также вы можете использовать в своих программах чужие библиотеки и наоборот — распространять свои библиотеки, чтобы другие программисты могли их использовать в своих программах.
Удобство использования библиотек заключается в том, что они не привязаны к языку программирования.
Резидентные программы
Резидентная программа — это программа, которая работает в фоновом режиме (то есть не видна пользователю и пользователь может о ней даже не подозревать). В фоновом режиме работают, например, антивирусы (и вирусы тоже))).
Системные программы
В общем-то это обычные программы, которые могут быть как консольными, так и оконными приложениями. Сюда же я бы отнёс резидентные программы, библиотеки и драйверы. Пожалуй, это будет не совсем правильно. Однако эта статья для начинающих. Поэтому я не хочу перегружать читателей информацией, которую они пока плохо понимают. Давайте пока будем думать, что это куча разных вспомогательных программ, которые необходимы для нормальной работы системы и оборудования.
Пока на этом всё. Домашнего задания не будет. Просто подумайте о том, как огромен мир программирования, и сколько всего вам надо будет ещё изучить)))
Компиляция консольных приложений Windows C в Linux
спросил
Изменено 6 лет, 2 месяца назад
Просмотрено 3к раз
Можно ли скомпилировать консольное приложение Windows C (. exe) в Linux? (точнее, Ubuntu)
Я давно слышал о кросс-компиляторах, но в то время они меня не интересовали.
С наилучшими пожеланиями
- c
- windows
- ubuntu
Этот пост содержит некоторую информацию, а также этот повторяющийся вопрос
Поскольку вы используете Ubuntu, вам нужны пакеты (я думаю) mingw32
apt-получить установку mingw32
Затем скомпилируйте с помощью i586-mingw32msvc-gcc, например.
i586-mingw32msvc-gcc helloworld.c -o helloworld.exe
3
Можно, если это стандартный язык C и не используются библиотеки Windows.
Код C сам по себе очень переносим, а стандартные библиотеки C (libc) доступны почти везде. Если ваш код выполняет функции printf(), sscanf(), fopen() и так далее, он просто скомпилируется и запустится на другой платформе. Windows, Linux, BSD и т. д.
Именно библиотеки , отличные от libc, создают проблемы с переносимостью.
Все, что связано с платформами для Windows, вызывает проблемы. Kernel32.lib, user32.lib и т. д. и т. д.
Существуют также сторонние библиотеки, которые, если они написаны на C, должны быть доступны в Linux и Windows. Хорошим примером здесь является PCRE — это библиотека регулярных выражений, написанная на C, и она доступна как в Windows, так и в Linux. в этом наборе буквально сотни библиотек.
Если вы ограничитесь вызовами libc и библиотек в переносимые библиотеки, то у вас будет переносимое приложение C.
1
Если вы говорите о приложении строго ANSI C, то у вас не должно возникнуть проблем с компиляцией с помощью gcc на платформе Linux.
Если вам нравятся системные библиотеки Windows, вам придется заменить эти вызовы их системными эквивалентами *nix (если они есть).
Если вы хотите скомпилировать программу из Linux в исполняемый файл Windows, да, кросс-компиляторы будут вариантом. http://www.airs.com/ian/configure/configure_5.html немного помог мне.
Вы имеете в виду, можете ли вы создать Windows .exe в Linux (т.е. разработать в Linux и доставить приложение пользователям Windows?)
Или вы имеете в виду взять приложение Windows и перекомпилировать (портировать) его в Linux, чтобы оно было создано и работает на линуксе?
Вы можете использовать WINE и установить VS, например. Другое решение использует MonoDevelop.
также вы можете использовать кросс-компиляторы, такие как Code::Blocks
Возможна кросс-компиляция. Насколько я знаю, вы получаете исполняемый файл Windows, который, конечно же, будет работать под Windows (и, возможно, WINE).
Для этого есть 2 возможных варианта: mingw и cygwin.
Один туториал. Страница кросс-компиляции MingW находится здесь.
0
Вы также можете использовать стандартный gcc в терминале Linux, вы можете использовать те же программы, которые вам нужны, только для изменения std. h с unistd.h (это означает, что вам нужно будет перейти на библиотеки, специфичные для Linux). У меня есть курс по программированию для Linux в школе, за исключением того, что он касается Ubuntu и изменений в библиотеке для ввода/вывода и некоторых связанных с потоками специфических для Linux, все это то же самое
пример: gcc -c myprogram.c // для компиляции gcc -o myprogram.o имя для создания библиотеки myprogram // с аргументами, если они есть
Зарегистрируйтесь или войдите в систему
Зарегистрируйтесь с помощью Google
Зарегистрироваться через Facebook
Зарегистрируйтесь, используя адрес электронной почты и пароль
Опубликовать как гость
Электронная почта
Требуется, но не отображается
Опубликовать как гость
Электронная почта
Требуется, но не отображается
ConsoleApplication — документация Xojo
Описание
Используется консольными (или командными) приложениями в Windows, macOS и Linux.
Методы
Имя | Параметры | Возврат | Общий |
---|---|---|---|
Демонизация | Логический | ||
События | [миллисекунды как целое число] |
События
Имя | Параметры | Возврат |
---|---|---|
Запуск | Args() как строка | Целое число |
необработанное исключение | ошибка Как RuntimeException | Логический |
Описания свойств
ConsoleApplication.BugVersion
BugVersion As Integer
Ошибка версии ConsoleApplication . Это можно установить только в среде IDE, но вы можете прочитать значение в своем коде.
Это свойство доступно только для чтения.
Обычно номера версий записываются как 1.2.3.4 (MajorVersion.MinorVersion.BugVersion.NonReleaseVersion).
Объединить все отдельные версии для создания полной версии:
Var fullVersion As String fullVersion = MajorVersion.ToString + "." + MinorVersion.ToString + "." + BugVersion.ToString + "." + NonReleaseVersion.ToString
ConsoleApplication.BuildDateTime
BuildDateTime As DateTime
Содержит дату и время сборки приложения.
Это свойство доступно только для чтения.
Вы также можете получить доступ к свойству CreationDateTime объекта FolderItem приложения, вызвав App.ExecutableFile.CreationDate.
ConsoleApplication.Copyright
Copyright As String
Информация об авторских правах DesktopApplication.
Это свойство доступно только для чтения.
Copyright обычно содержит название приложения, номер версии и информацию об авторских правах.
Регистрирует версию приложения:
System.DebugLog("Авторское право: " + App.Copyright)
ConsoleApplication.Description
Описание As String
Описание приложения, соответствующее информации о версии.
Это свойство доступно только для чтения.
Это свойство можно задать только в среде IDE.
ConsoleApplication.ExecutableFile
ExecutableFile As FolderItem
Указывает на фактический исполняемый файл, даже если он находится внутри пакета.
Это свойство доступно только для чтения.
Чтобы получить имя исполняемого файла приложения:
Var appName As String = App.ExecutableFile.Name
ConsoleApplication.MajorVersion
MajorVersion As Integer
Основная версия ConsoleApplication , соответствующий информации о версии. Диапазон — от 0 до 255. Его можно установить только в среде IDE, но вы можете прочитать значение в своем коде.
Это свойство доступно только для чтения.
Обычно номера версий записываются как 1.2.3.4 (MajorVersion.MinorVersion.BugVersion.NonReleaseVersion).
Объединить все отдельные версии для создания полной версии:
Var fullVersion As String fullVersion = MajorVersion.ToString + "." + MinorVersion.ToString + "." + BugVersion.ToString + "." + NonReleaseVersion.ToString
ConsoleApplication.MinorVersion
MinorVersion As Integer
Дополнительная версия ConsoleApplication , соответствующая информации о версии. Диапазон — от 0 до 255. Его можно установить только в среде IDE, но вы можете прочитать значение в своем коде.
Это свойство доступно только для чтения.
Обычно номера версий записываются как 1.2.3.4 (MajorVersion.MinorVersion.BugVersion.NonReleaseVersion).
Объедините все отдельные версии, чтобы создать полную версию:
Var fullVersion As String fullVersion = MajorVersion. ToString + "." + MinorVersion.ToString + "." + BugVersion.ToString + "." + NonReleaseVersion.ToString
ConsoleApplication.NonReleaseVersion
NonReleaseVersion As Integer
Версия NonRelease ConsoleApplication , соответствующая информации о версии. Иногда упоминается как номер сборки. Это можно установить только в среде IDE, но вы можете прочитать значение в своем коде.
Это свойство доступно только для чтения.
Обычно номера версий записываются как 1.2.3.4 (MajorVersion.MinorVersion.BugVersion.NonReleaseVersion).
Если установлен флажок AutoIncrementVersionInformation, среда IDE увеличивает значение NonReleaseVersion на единицу при каждой сборке проекта, но не при его запуске.
Объединить все отдельные версии для создания полной версии:
Var fullVersion As String fullVersion = MajorVersion.ToString + "." + MinorVersion.ToString + "." + BugVersion.ToString + "." + NonReleaseVersion. ToString
ConsoleApplication.RegionCode
RegionCode Целое число
Код региона приложения, соответствующий информации о версии. Не поддерживается в Windows. Это свойство можно задать только в среде IDE.
Это свойство доступно только для чтения.
ConsoleApplication.StageCode
StageCode Целое число
Код этапа приложения, соответствующий информации о версии.
Это свойство доступно только для чтения.
Используйте четыре константы класса Application для установки/получения Stage. Стадия может быть установлена только в IDE.
Значение | Описание |
---|---|
0 | Разработка |
1 | Альфа |
2 | Бета |
3 | Окончательный |
ConsoleApplication. Version
Версия As String
Версия ConsoleApplication .
Это свойство доступно только для чтения.
Это свойство можно задать только в среде IDE.
Обычно номера версий записываются как 1.2.3.4.
Версия отображается в окнах информации о файле в macOS (Finder, Get Info) и Windows (Windows Explorer, Properties).
Описание методов
ConsoleApplication.Daemonize
Daemonize As Boolean
Преобразует приложение из обычного консольного приложения в процесс-демон, работающий в фоновом режиме на macOS или Linux.
Поскольку демонизированные консольные приложения нельзя запускать из среды IDE, вам следует собрать и протестировать недемонизированное консольное приложение, а затем демонтировать его при сборке. Используйте System для обработки отладки.
Хотя вы также можете использовать метод Daemonize в macOS, Apple предпочитает использовать launchd для запуска процессов демона.
Для создания фонового консольного приложения в Windows необходимо использовать ServiceApplication.
Типичное использование метода Daemonize выглядит следующим образом:
#If Not DebugBuild Then // Не пытайтесь демонизировать отладочную сборку If (args(1) = "start" Or args(1) = "-d") Then // Проверка параметра командной строки для демонизации Если Не App.Daemonize Тогда System.Log(System.LogLevelCritical, «Не удалось демонизировать приложение».) Возврат -1 Конец, если Конец, если #Endif
ConsoleApplication.DoEvents
DoEvents ([миллисекунды как целое число])
Возвращает время вашему приложению, чтобы оно могло обрабатывать другие события.
// В событии Run вашего консольного приложения Var consoleTimer As New MyTimerSubclass consoleTimer.RunMode = Timer.RunModes.Multiple // Не забывайте об этом consoleTimer.Period = 1000 // Вызов каждую секунду Делать App.DoEvents Петля
Описания событий
ConsoleApplication. Run
Выполнить (Args() As String) As Integer
Код в этом событии запускается при запуске консольного приложения. Консольное приложение завершает работу, когда завершается это событие.
Args — это массив параметров командной строки, которые передаются приложению. Первым параметром всегда будет само приложение. Возвращаемое значение будет передано в операционную систему как возвращаемое значение для всего приложения. Кодировка Args() зависит от операционной системы. В системах на базе NT это UTF-16. В Linux это будет UTF-8 и так далее.
В macOS и Linux массив Args() содержит переданные аргументы в виде без экранирования и без кавычек значения:
Неэкранированный , то есть перед ним стоит символ обратной косой черты. Значения Args() содержат символ без предшествующей обратной косой черты.
Без кавычек : вместо экранирования некоторых символов можно использовать одинарные или двойные кавычки. Кавычки удалены в Args() значения.
Например, передача следующей командной строки из терминала:
/path/to/my/application -a —name=»Параметр строки в кавычках» —file=~/Anescapedpath
приводит к следующему результату Массив Args() :
# | Описание |
---|---|
0 | /путь/к/моему/приложению |
1 | -а |
2 | —name=Параметр строки в кавычках (двойные кавычки удалены) |
3 | —file=~/Экранированный путь (символы не экранированы) |
Если ваше приложение успешно завершило работу, оно должно вернуть 0 из этого события. Если нет, он должен вернуть какой-то ненулевой код ошибки.
ConsoleApplication.UnhandledException
UnhandledException (ошибка As RuntimeException) As Boolean
Происходит при возникновении RuntimeException, которое иначе не обрабатывается.
Это событие позволяет выполнить любую последнюю очистку, но приложение не возобновляет работу после этого события. Приложение завершает работу после этого события.
Событие UnhandledException возвращает логическое значение. По умолчанию приложение пишет сообщение об ошибке в stderr. Верните True, чтобы подавить вывод в stderr.
Примечания
Консольное приложение отличается от настольного приложения тем, что оно не содержит графического пользовательского интерфейса и работает только из командной строки. В macOS консольное приложение запускается в терминальном приложении; в Windows он запускается из командной строки, а в Linux — из командной строки или окна терминала.
Чтобы создать консольное приложение, выберите «Файл» => «Новый проект» и выберите «Консольное приложение» в окне «Селектор нового проекта». Это создаст новый проект без элементов для окна и строки меню по умолчанию. Навигатор будет иметь только класс App, который является подклассом 9. 0216 ConsoleApplication вместо DesktopApplication или WebApplication.
Поскольку консольное приложение не имеет собственных окон или меню, оно взаимодействует с пользователем с помощью команд печати и ввода или классов StandardInputStream и StandardOutputStream, которые обеспечивают эквивалентную функциональность.
Когда вы создаете приложение Desktop, выполнение программы начинается с события Opening класса DesktopApplication и останавливается, когда вы вызываете метод Quit или пользователь выходит из вашего приложения, выбирая File => Quit. Ваша программа останется загруженной в память и будет работать до тех пор, пока не будет получена команда Quit.
Консольное приложение ведет себя иначе, чем настольное приложение. Выполнение программы начинается с события Run класса ConsoleApplication и завершается при выходе из события Run или вызове метода Quit. Другими словами, все приложение выполняется внутри события Run. Нажмите Control-C, чтобы принудительно закрыть консольное приложение.
Примечание
Консольные приложения не имеют основного цикла событий. Это означает, что классы, основанные на таком цикле событий, не будут работать должным образом, как, например, таймеры или сокеты. См. метод DoEvents, чтобы узнать, как использовать таймеры и сокеты в консольном приложении.
Если вы хотите, чтобы ваше приложение вело себя более похоже на графический интерфейс и продолжало работать до тех пор, пока пользователь не взаимодействует с ним, вы можете сделать это, поместив цикл While в событие Run.
ServiceApplication — это особый тип консольного приложения, предназначенного для работы без какого-либо вмешательства пользователя. Типичным типом служебного приложения является интернет-сервер, такой как сервер HTTP, FTP или WebDAV, который может работать без входа пользователя в систему.
В Linux консольное приложение не требует GTK, GDK или CUPS.
Метод Daemonize
Типичное использование метода Daemonize выглядит следующим образом:
If (args(1) = "start" Or args(1) = "-d") Then Если Не App.