Язык Си в примерах/Использование аргументов командной строки: различия между версиями

Содержимое удалено Содержимое добавлено
мНет описания правки
мНет описания правки
Строка 2:
 
== Аргументы командной строки ==
Программы могут принимать аргументы. Ниже приведен пример программы <tt>argv</tt>, которая печатает список аргументов,
которые были переданы ей в командной строке.
Пример ее работы:
 
bash$ ./argv alpha beta gamma last
Строка 16:
=== Пример 1 ===
 
/* Program: argv.c
Build me with
gcc -o argv argv.c
*/
#include <stdio.h>
int main (int argc, char * argv[]) {
int
main (int argc, char * argv[])
{
int i;
for( i = 0 ; i < argc; i++) {
{
printf("Argument %d: %s\n", i, argv[i]);
}
if(argc == 1) {
{
printf("Command line has no additional arguments\n");
}
return 0;
}
 
 
 
Строка 45 ⟶ 40 :
выведет содержимое директории '/home/user'.
 
Команда 'ls' имеет множество опций, которые можно передавать в командной строке. оО них вы можете узнать,
запустив команду 'ls' с опцией '-h':
 
bash$ ls -h
 
Вообще, программа может получать данные из нескольких источников. Наиболее важные источники это:
 
* аргументы командной строки;
Вообще, программа может получать данные из нескольких источников. Наиболее важные источники это
* стандартный поток ввода;
* аргументы командной строки
* файлы ;
* стандартный поток ввода
* средства взаимодействия процессов (signals, sockets, messages, ...).
* файлы
* средства взаимодействия процессов (signals, sockets, messages, ...)
 
Научимся использовать первый из них.
Строка 61 ⟶ 55 :
== Подробнее об аргументах командной строки ==
 
Основной функцией в программе на языке Си является функция <tt>main()</tt>. Мы уже познакомились с простейшим способом объявления этой функции:
 
/*
* Простейшая форма main()
*/
int main() {
Строка 76 ⟶ 69 :
Для того, чтобы ваша программа могла анализировать параметры, передаваемые ей через командную строку, функцию main() следует описать несколько сложнее:
 
/*
* main() с обработкой параметров
*/
int main(int argc, char **argv) {
Строка 88 ⟶ 79 :
}
 
При такой записи, при вызове вашей программы, параметр <tt>argc</tt> будет содержать количество параметров командной строки '''плюс один'''. Действительные параметры нумеруются с единицы по <tt>argc-1</tt> включительно (т.е. всего <tt>argc-1</tt> параметров), параметр под номером ноль является служебным -&mdash; он содержит полный путь и имя исполняемого файла вашей программы.
 
Для доступа к параметру под номером <tt>i</tt> следует писать <tt>argv[i]</tt>. Выражение <tt>argv[i]</tt> -&mdash; это строка, передаваемая в соответствии с соглашениями языка Си о строках. С ней можно проделывать все операции, как с обычной строкой. (Еёеё даже можно модифицировать, но это считается дурным тоном!).
 
Вот еще один пример программы, работающей со своей командной строкой:
Строка 98 ⟶ 89 :
* Пример программы, работающей со своей командной строкой
*/
#include <stdio.h>
#include <string.h>
int main(int argc, char **argv) {
if(argc <= 1) {
printf("syntax : \n\t./p --help or\n\t./p --add [a] [b]\n");
}
if(!strcmp(argv[1], "--help")) {
printf("You requested help message.\n");
} else if(!strcmp(argv[1], "--add")) {
}
else if(!strcmp(argv[1], "--add")) {
if(argc <= 3) {
printf("'--add' operation requires two parameters.\n");
} else {
else {
int a, b;
if(sscanf(argv[2], "%d", &a) != 1 || sscanf(argv[3], "%d", &b) != 1) {
printf("'--add' operation requires two integer parameters.\n");
} else {
else {
printf("%d + %d = %d\n", a, b, a+b);
}
}
} else {
else {
printf("Unknown parameter: '%s'. Type ./p --help for help.\n", argv[1]);
}
return 0;
}
Строка 135 ⟶ 116 :
== Задачи для самостоятельного решения ==
 
* Напишите программу, которая интерпретирует свои аргументы как целые сила и выводит на стандартный поток вывода их сумму.
* Напишите программу, которая принимает аргумент -- имя файла, и выводит содержимое этого файла.
:* в текстовом виде, обозначая не ASCII символы знаками вопроса (если дана опция =-text= );
:* в шестнадцатиричном виде (если дана опция =-hex=);
:* как есть (по умолчанию).
 
 
==См. также==
* [[Язык Си в примерах/Система счисления|Системы счисления]]