Потоки ввода-вывода

Скрыты за абстрактным типом FILE:

FILE* f = fopen("file.txt", "r");
if (f == NULL) {
    perror("file.txt");
    ...
}
fclose(f);

Запуск программы на языке Си

Стандарт гласит:

The function called at program startup is named main. The implementation declares no
prototype for this function. It shall be defined with a return type of int and with no
parameters:
    int main(void) { /* ... */ }
or with two parameters (referred to here as argc and argv, though any names may be
used, as they are local to the function in which they are declared):
    int main(int argc, char *argv[]) { /* ... */ }
or equivalent; or in some other implementation-defined manner.

На Linux операционная система запускает программу с точки входа, которая обычно называется _start, и стандартная библиотека предоставляет примерно такую реализацию:

void _start() {
    ... // retrieve cmdline args and environment
    ... // initialize stdlib data structures

    int exit_status = main(argc, argv, envp);
    exit(exit_status); // flushes output streams, calls atexit() hooks
}