Статья Каталог
main
функция
Из C программы всегда main
начинается выполнение функций. main
Прототип функции является:
int main(int argc, char *argv[]);
argc
Является ли количество аргументов командной строки,argv
представляет собой массив указателей каждый из которых указывает параметры составлявших.Когда программа выполнения ядра C, вызов ,
main
прежде чем функция вызвать специальную процедуру запуска. Этот исполняемый файл , указанный в качестве адреса процедуры обычного запуска - это настройки редактора соединения, связанные с помощью редактора редактора C называется. Процедура запуска , чтобы получить аргументы командной строки и среды значения переменных из ядра, то , как описано выше , чтобы позвонитьmain
функцию , чтобы принять меры.
Процесс завершается
Есть 8 способов сделать процесс прекращения, в том числе пяти видов нормального завершения, то они таковы:
- С
main
возвращением - вызов
exit
- Позвоните
_exit
или_Exit
- Последний поток возвращается из своей процедуры запуска
- Последний вызов из потока
pthread_exit
Отменен три способа, то они таковы:
- Вызов
abort
функции - Прием сигнала
- Последняя нить, чтобы ответить на запрос отмены
1. Закройте функцию
3 функции для нормального завершения. _exit
И _Exit
функции сразу в ядре exit
функцию для выполнения какого - то процесса очистки, а затем вернуться к ядру.
#include <stdlib.h>
void exit(int status);
void _Exit(int status);
#include <unistd.h>
void _exit(int status);
main
Вызов функции возвращает целое число со значением exit
эквивалента. Таким образом , в main
функции , exit(0);
эквивалентнойreturn (0);
Пример испытаний:
#include <stdio.h>
main()
{
printf("hello, world\n");
}
2. Функцииatexit
В соответствии с ISO C, процесс может быть зарегистрировано до 32 функций, эти функции будут exit
автоматически вызывает. Эти функции называются завершение программы обработки, и вызывает atexit
функцию , чтобы зарегистрировать эти функции.
#include <stdlib.h>
int atexit(void (*func)(void));
返回值:若成功,返回 0;若出错,返回非 0。
atexit
Параметр функции является адресом функции, при вызове этой функции без необходимости передавать параметры к нему, не ожидает , что он возвращает значение.exit
Порядок функции и вызывать эти функции , когда они проверяются в обратном порядке. Если же функция регистрируется несколько раз, он будет вызываться несколько раз.
Пример испытаний:
#include "../../include/apue.h"
static void my_exit1(void);
static void my_exit2(void);
int main(void)
{
if(atexit(my_exit2) != 0)
err_sys("can't register my_exit2");
if(atexit(my_exit1) != 0)
err_sys("can't register my_exit1");
if(atexit(my_exit1) != 0)
err_sys("can't register my_exit1");
printf("main is done\n");
return 0;
}
static void my_exit1(void)
{
printf("first exit handler\n");
}
static void my_exit2(void)
{
printf("second exit handler\n");
}
Результаты таковы:
Из приведенного выше графика, прекращение функции порядок выполнения противоположен порядку их регистрации, а также my_exit1
функция регистрируется дважды, она выполняется в два раза.
Параметры командной строки
При выполнении программы, вызывая exec
аргументы командной строки процесс может быть передан в новую программу. Это часть нормальной работы UNIX оболочки.
Тестовый пример:
Все аргументы командной строки вторили на стандартный вывод, однако, обычная echo
программа не может повторить аргумент номер 0.
#include "../../include/apue.h"
int main(int argc, char *argv[])
{
int i;
//for(i = 0; i < argc; i++)
for(i = 0; argv[i] != NULL; i++)
printf("argv[%d]: %s\n", i, argv[i]);
return 0;
}
Результаты таковы:
Экологическая Таблица
Каждая программа получает таблицу окружения, ту же таблицу с параметрами таблица среды символьный массив указателей, каждый из которых содержит указатель на нуль ( «\ 0») адрес конца строки C. Глобальная переменная environ
содержит адрес массива указателей:
extern char **environ;
Мы называем environ
для указателя окружения, массив указателей на окружающую среду таблицу, где каждая строка представляет собой указатель на строки окружения. Исторически сложилось, что большинство систем UNIX поддерживают основная функция принимает три параметра, третий параметр является адресом таблицы среда:
int main(int argc, char *argv[], char *envp[]);
Поскольку положения ISO C main
функции только два параметра, а первые три параметра и глобальные переменные по environ
сравнению с не принести больше пользы, она также обеспечивает POSIX.1 следует использовать environ
вместо первых трех параметров. Обычно используются getenv
и putenv
функции переменных среды доступа, а не environ
переменных. Тем не менее, если вы хотите , чтобы увидеть всю окружающую среду, необходимо использовать environ
указатель.