Работа с файлами средствами стандартной библиотеки Си

Пример 1 - создание файла для записи

Внимательно изучите и наберите в редакторе исходный текст предлагаемой программы:

$ vim fw.c

fw.c.png

Cкомпилируйте и запустите программу:

$ gcc fw.c -o fw -lm
$ ./fw

Что при этом произошло? Проверьте значение, которое вернула ваша программа операционной системе:

$ echo $?

Что означает этот код? Убедитесь в том, что программа создала файл data.txt в текущем каталоге:

$ ls

Выведите содержимое файла на экран:

$ cat data.txt

Теперь запретите запись в файл, перезапустите программу и проанализируйте её работу:

$ chmod -w data.txt
$ ./fw
$ echo $?
$ cat data.txt

Разрешите запись в файл, повторно запустите программу и убедитесь в том, что файл перезаписан:

$ chmod +w data.txt
$ ./fw
$ echo $?
$ cat data.txt

Ознакомьтесь с документацией по функциям fopen(), fclose(), fprintf(), perror():

$ man fopen
$ man fclose
$ man fprintf
$ man perror

Пример 2 - чтение файла

Внимательно изучите и наберите в редакторе текст программы:

$ vim fr.c

fr.c.png

Скомпилируйте, запустите приложение и проанализируйте его работу:

$ gcc fr.c -o fr
$ ./fr

Ознакомьтесь с документацией по функциям fscanf(), calloc(), free():

$ man fscanf
$ man calloc
$ man free

Пример 3 - запись аргументов программы в файл

Внимательно изучите и наберите в редакторе исходный текст следующей программы:

$ vim args.c

args.c.png

Скомпилируйте и запустите приложение:

$ gcc args.c -o args -std=c99
$ ./args

Что при этом произошло? Запустите программу с аргументами:

$ ./args 123 Hello world 12\ 34

Что происходит при таком запуске программы? Убедитесь в том, что программа создала в текущем каталоге файл args.txt и записала в него переданные ей аргументы:

$ ls
$ cat args.txt

Зачем потребовалось использовать опцию -std=c99 при трансляции программы? Ознакомьтесь с документацией по функциям exit(), strlen(), strcpy(), strcat():

$ man exit
$ man strlen
$ man strcpy
$ man strcat

Объясните строку программы, в которой вызывается функция strcpy(). Что произойдёт, если изменить её так, как указано в комментарии? Всегда ли эти варианты эквивалентны?