0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 185

Не понимаю, зачем нужны переменные среды и командная строка

12.07.2015, 12:16. Показов 4610. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Объясните, пожалуйста на пальцах какой прок от командной строки и переменных окружения. Я читаю Рихтера и тут описано что они есть и как ими манипулировать, но какой практический толк от этой информации?

Спасибо!

Добавлено через 15 часов 24 минуты
Возможно, у меня были галлюцинации в 3 часу ночи, после просмотра СайлентХил. Но тут были 2 ответа в которых содержались ссылки на схожие темы в которых в пылу дискуссий излагали ответы на мои вопросы. Удалили?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.07.2015, 12:16
Ответы с готовыми решениями:

Не понимаю в чем дело, сильно тупит командная строка в windows 10
Доходит до того, что он просто не может открыть файл (когда указываешь путь к файлу (полный)), обычно пишет неверно задано имя папки. Это...

Зачем нужны массивы, если есть обычные переменные?
Здравствуйте. У меня есть вопрос. Зачем нужны массивы, если есть обычные переменные? Можно ведь написать не так: int a= {6,5}; а так:...

Переменные среды - II
Ребята, вот что у меня получилось. Работает. -------------------------------------------------------- import java.io.*; import...

6
 Аватар для casper007
71 / 71 / 58
Регистрация: 12.12.2013
Сообщений: 420
15.07.2015, 15:44
Командная строка. Вслушайтесь! "Командная", то есть, выполняет команды. Допустим, вы решили скомпилировать исходники, ваши действия: Открыть командную строку, найти исходник, ввести команду "cl example.cpp", и если компилятор установлен, прописан в переменные среду, то операционная система выполнит нужную операцию. Переменные среды для того и нужны, чтобы система знала где искать ту или иную программу.
0
Эксперт .NET
 Аватар для Rius
12377 / 7360 / 1627
Регистрация: 25.05.2015
Сообщений: 22,256
Записей в блоге: 14
15.07.2015, 15:51
А также переменные среды могут использоваться при выполнении команды и влиять на её результат.

По поводу СайлентХилла - для незалогинившихся и новичков форум выглядит немного иначе:
1
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 185
19.07.2015, 15:38  [ТС]
спасибо, за ответ. Понятно - я видел бота. С командной строкой все сложнее, не пойму где ее можно "руками потрогать" Буду ломать голову...
0
 Аватар для casper007
71 / 71 / 58
Регистрация: 12.12.2013
Сообщений: 420
19.07.2015, 16:22
Цитата Сообщение от MMt Посмотреть сообщение
руками потрогать"
cmd.exe, Developer Command Prompt for VS20XX, где последняя есть надстройка, которая прописывает в path пути до служебных программа (компилятор, и т.п.)
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18025 / 7728 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
20.07.2015, 22:29
Лучший ответ Сообщение было отмечено MMt как решение

Решение

MMt, заходите к нам в раздел: https://www.cyberforum.ru/cmd-bat/
Там можно потрогать и руками, и ногами, и посмотреть, и пощупать -))

Скажем так, командная строка - это как один из вариантов связующего звена между процессами*.
*Говоря о процессах, подразумеваются, что они еще не запущены, а только будут.

Вариантов ее использования чаще всего 2:
1) ввод команд непосредственно в интерпретатор cmd (Win + R, cmd, каждую команду подтвержать клавишей ENTER).
2) написание пакетного файла (батника (Windows Batch)). Это простой текстовый файл (обычно, в ANSI или OEM) с расширением .cmd или .bat).
Каждая команда пишется с новой строки (как правило).

Как образуется связь?
1) передачей потока данных через канал или перенаправление из файла.
Пример:
Windows Batch file
1
2
3
4
:: канал
echo Data | find.exe "D" && echo Найдено.
:: из файла
< Data.txt Find.exe "D" && echo Letter D is exists in file Data.txt
2) передачей 1 или нескольких аргументов:
Цитата Сообщение от casper007 Посмотреть сообщение
cl example.cpp
cl.exe - программа,
example.cpp - переданный аргумент.

Соответственно в C++, argv[1], будет содержать тот самый аргумент, а argc - их общее кол-во.

3) Через переменные окружения. Поговорим далее...
4) Прочие примитивные способы, такие как запись во внешний файл, а затем считывание его другим процессом (синхронность естественно обязательна). Ком. строка позволяет реализовать ожидание завершения процесса например, так:
Windows Batch file
1
start "" /wait process.exe
Следующим очевидным способом связи - является автоматизация с помощью батника последовательности выполнения различных процессов: например, Вы можете создать батник для сборки проекта. Допустим - компиляция / upx / подписание / бекап.

Но возможности ком. строки не ограничиваются вызовом готовых программ.
В ней есть также несколько встроенных команд, простейшая математика, а в папке c:\windows\system32 достаточно консольных утилит на разный вкус, откуда можно получить доступ как к файловой системе, так и к реестру, WMI... Но это тянет на большую отдельную тему. Частично пытались объять ее здесь.

На счет переменных окружения. Они есть у любого процесса. Environment variables Block.
Если внимательно почитаете на MSDN о функции CreateProcess, то узнаете про их наследование, а также возможность задать процессу свой набор переменных окружения.

Связь с командной строкой здесь вот какая.
Она умеет напрямую манипулировать переменными окружения процесса (в данном случае, cmd.exe).
Соответственно все процессы, которые из-под нее будут стартовать, также наследуют этот блок (если не блокировать спец. ключами).
Введите в интерпретаторе команду set и увидите эти переменные.

На счет - зачем нужны переменные среды?
Целей их использования довольно много. Из тех, что скажу сразу навскидку:
- есть специальные переменные, такие как "Path". Она задает список путей, по которым будет происходить поиск исполняемого файла, если в командной строке опустить (не указывать) полный путь к нему.
TEMP - используется многими программами как путь к папке, где можно складировать временные файлы.
Вообщем введите команду set, дальше поймете.
- Есть множество переменных, указывающий на путь к специальным папкам.
Разработчики часто используют их, что не есть правильно, т.к. легко позволит осуществить атаку на приложение. Верным способом является использование функции SHGetFolderPath / SHGetKnownFolderPath и прочих особых, как GetWindowsDirectory.
- управление слоями совместимости (app compatibility layers).

Ну а в самом интерпретаторе cmd - эти переменные является чем то вроде аналога глобальных переменных ЯВУ.
Тем не менее существуют механизмы виртуализации, которые позволяют очистить измененный блок переменных процесса cmd.exe

Добавлено через 7 часов 6 минут
Про самое главное забыл сказать - связь в обратную сторону.

Пункт 1.

После завершения работы программа может устанавливать код возврата, например:
1) через указание числа, возвращаемого главной функцией (main):
C++
1
return 1;
2) через функцию:
C++
1
ExitProcess 1;
где число 1 - и будет кодом возврата. По-умолчанию, код 0 - успешное завершение программы (EXIT_SUCCESS).
Этот код затем легко получить из командной строки:
Windows Batch file
1
echo %errorlevel%
и в зависимости от этого предпринимать те или иные дальнейшие действия, например,
консольный архиватор вернул код неудачного завершения (все что не равно 0 считается неудачей, обычно),
тогда мы можем закодить пакетный файл прервать дальнейшие действия, а если УСПЕХ сборки, то к примеру, отправить наш собранный бинарник на проверку в VirusTotal (очередной скрипт).
В пакетном файле будет выглядеть очень просто:
Windows Batch file
1
7z a -mx9 -y -o"c:\Backups" Backup001.zip "c:\project\my.exe" && "%appdata%\VTUploader\PhrozenSoft VirusTotal Uploader.exe" /scan "c:\project\my.exe"
&& - выполнить команду справа, если код возврата слева УСПЕХ (0).
|| - выполнить команду справа, если код возврата слева НЕУДАЧА (не 0).

Пункт 2.

CMD умеет делать разбор консольного вывода программы.
Если у Вас тип приложения консольное, то посредством:
C++
1
2
std::cout << "some data" << std::endl;
std::cerr << "some error message" << std::endl;
Вы можете передать данные либо:
1) на экран консоли
2) для синтаксического разбора циклу FOR батника, который в зависимости от текста предпримет те или иные действия (по завершению работы программы, т.е. неинтерактивно).

На счет переменных окружения можете еще почитать статью от Вадима Стеркина и spe******t: Переменные среды в командной строке
(но там больше общие понятия, не связанные с ЯП).
Вспомнил также, что переменные процесса также иногда используют для передачи данных от потока к родительскому процессу при синхронном подходе. Это не очень хорошая практика тем не менее имеет право на существование, если автор понимает все риски и знает, как это использовать правильно.
2
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 185
21.07.2015, 22:21  [ТС]
ух, мне на неделю материала спасибо пошел пробовать)))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.07.2015, 22:21
Помогаю со студенческими работами здесь

Переменные среды
У меня такая же проблема, как у автора. Тоже проверял на подлинность. Потом перестал работать офис. Решила эту проблему, установив ...

Переменные среды
Привет ! Вот записал в переменные среды такую штуку : RESIN_HOME=@#$. Хочу ее прочитать в программе. Как это можно сделать...

переменные среды
как мне из папки system, считать файл fi1.txt? помогите товарищи string xt1 =...

Переменные среды
Например, я скачал и разархивировал JDK. Как сделать так, чтобы он был виден системе, т. е. если я пропишу java -version, мне не говорило,...

Переменные среды Windows
Приветствую Уважаемые форумчане! Есть у меня функция для извлечения из переменной полного пути. function GetAbsPath(const...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

Новые блоги и статьи
Unity 4D
GameUnited 13.06.2025
Четырехмерное пространство. . . Звучит как что-то из научной фантастики, правда? Однако для меня, как разработчика со стажем в игровой индустрии, четвертое измерение давно перестало быть абстракцией из. . .
SSE (Server-Sent Events) в ASP.NET Core и .NET 10
UnmanagedCoder 13.06.2025
Кажется, Microsoft снова подкинула нам интересную фичу в новой версии фреймворка. Работая с превью . NET 10, я наткнулся на нативную поддержку Server-Sent Events (SSE) в ASP. NET Core Minimal APIs. Эта. . .
С днём независимости России!
Hrethgir 13.06.2025
Решил побеседовать, с утра праздничного дня, с LM о завоеваниях. То что она написала о народе, представителем которого я являюсь сам сначала возмутило меня, но дальше только смешило. Это чисто. . .
Лето вокруг.
kumehtar 13.06.2025
Лето вокруг. Наполненное бурями и ураганами событий. На фоне магии Жизни, священной и вечной, неумелой рукой человека рисуется панорама душевного непокоя. Странные серые краски проникают и. . .
Популярные LM модели ориентированы на увеличение затрат ресурсов пользователями сгенерированного кода (грязь -заслуги чистоплюев).
Hrethgir 12.06.2025
Вообще обратил внимание, что они генерируют код (впрочем так-же ориентированы разработчики чипов даже), чтобы пользователь их использующий уходил в тот или иной убыток. Это достаточно опытные модели,. . .
Топ10 библиотек C для квантовых вычислений
bytestream 12.06.2025
Квантовые вычисления - это та область, где теория встречается с практикой на границе наших знаний о физике. Пока большая часть шума вокруг квантовых компьютеров крутится вокруг языков высокого уровня. . .
Dispose и Finalize в C#
stackOverflow 12.06.2025
Работая с C# больше десяти лет, я снова и снова наблюдаю одну и ту же историю: разработчики наивно полагаются на сборщик мусора, как на волшебную палочку, которая решит все проблемы с памятью. Да,. . .
Повышаем производительность игры на Unity 6 с GPU Resident Drawer
GameUnited 11.06.2025
Недавно копался в новых фичах Unity 6 и наткнулся на GPU Resident Drawer - штуку, которая заставила меня присвистнуть от удивления. По сути, это внутренний механизм рендеринга, который автоматически. . .
Множества в Python
py-thonny 11.06.2025
В Python существует множество структур данных, но иногда я сталкиваюсь с задачами, где ни списки, ни словари не дают оптимального решения. Часто это происходит, когда мне нужно быстро проверять. . .
Работа с ccache/sccache в рамках C++
Loafer 11.06.2025
Утилиты ccache и sccache занимаются тем, что кешируют промежуточные результаты компиляции, таким образом ускоряя последующие компиляции проекта. Это означает, что если проект будет компилироваться. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru