Разное

Консольные приложения c: Учебник. Создание простого консольного приложения C# — Visual Studio (Windows)

c# — Консольные приложения — Stack Overflow на русском

Вопрос задан

Изменён 11 лет 4 месяца назад

Просмотрен 4k раза

Вот вопрос, во многих книгах которые я читаю, везде начинают обучение в консольных приложениях… но вот вопрос, почему именно в них, и второй Зачем воообще консольные приложения??

  • c#
  • console

3

Есть разные виды приложений и их классификаций. Одна из них: приложения бывают трансформирующие, интерактивные и реактивные (реального времени). Так вот, первые из них, трансформирующие, характеризуются тем, что берут данные на входе (упрощённо — входной файл), работают какое-то время, обязательно конечное, и выдают результаты (упрощённо — в выходной файл).

Таких задач очень много и участие человека там в процессе минимально. (Частный случай — это подзадачи какого-то интерактивного приложения). Вот для них и нужны консольные приложения. Ну и плюс интерактивные задачи, где диалог — не графический, а текстовый. Где-то так. Ну и задачи реального времени редко бывают с графическим интерфейсом. Плюс всякие сервера (http, ftp и т.д.)

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.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *