/home/alex/tmp $ cat /home/alex/tmp abc open read/write close">
Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 11 лет назад пользователемТимур Негодяев
1 ФГОБУ ВПО "СибГУТИ" Кафедра вычислительных систем Лабораторная работа 2 Преподаватель: Доцент Кафедры ВС, к.т.н. Поляков Артем Юрьевич © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» ФГОБУ ВПО "СибГУТИ" Кафедра вычислительных систем ПРОГРАММИРОВАНИЕ ЯЗЫКИ ПРОГРАММИРОВАНИЯ
2 Файлы © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 2 Файл – упорядоченная совокупность данных, хранимая на диске и занимающая именованную область внешней памяти. prog disk file 1. Сохранение информации, необходимой в дальнейшем, перед завершением prog disk file 2. Считывание информации сформированной этой или другими программами
/home/alex/tmp $ c" title="Операции над файлами © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 3 Операции над файлами делятся на два класса Не требующие открытия файлаСвязанные с открытием файла $ mv /usr/bin/ls /bin $ cp /bin/rm /bin/rm1 $ echo "abc" > /home/alex/tmp $ c" class="link_thumb"> 3 Операции над файлами © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 3 Операции над файлами делятся на два класса Не требующие открытия файлаСвязанные с открытием файла $ mv /usr/bin/ls /bin $ cp /bin/rm /bin/rm1 $ echo "abc" > /home/alex/tmp $ cat /home/alex/tmp abc open read/write close /home/alex/tmp $ c"> /home/alex/tmp $ cat /home/alex/tmp abc open read/write close"> /home/alex/tmp $ c" title="Операции над файлами © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 3 Операции над файлами делятся на два класса Не требующие открытия файлаСвязанные с открытием файла $ mv /usr/bin/ls /bin $ cp /bin/rm /bin/rm1 $ echo "abc" > /home/alex/tmp $ c">
4 Запись в файл © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 4 1. Пустой файл, /home/alex/file 2. fp = fopen("/home/alex/file ","w") Файловый указатель 3. fprintf(fp,"Test#%d ", num++) Файловый указатель Test#1 4. fprintf(fp,"Test#%d", num) Файловый указатель Test#1 Test#2 5. fclose(fp) Test#1 Test#2
5 Чтение файла © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 5 4. fscanf(fp,"%s", buf) Файловый указатель Test#1 Test#2 1. Файл на диске /home/alex/file Test#1 Test#2 2. fp = fopen("/home/alex/file ","r") Файловый указатель Test#1 Test#2 3. fscanf(fp,"%s", buf) Файловый указатель Test#1 Test#2 5. fclose(fp) Test#1 Test#2
6 Работа с файлами © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 6 Открытие файла (подготовка к работе) FILE * fopen (const char *filename, const char *opentype) Функция fopen связывается с ОС и запрашивает доступ к файлу, далее инициализирует внутреннюю структуру FILE, используемую для доступа к файлу другими функциями. Действие с файлом (запись, чтение) int fprintf (FILE *stream, const char *template,...); int fscanf (FILE *stream, const char *template,...); Функции fprintf/fscanf используют структуру FILE для определения файла, с которым необходимо осуществлять соответствующие действия. По функционалу они аналогичны уже известным функциям printf/scanf. Закрыть файл (освободить) int fclose (FILE *stream); Функции fclose освобождает структуру FILE, а также ресурсы ядра ОС, выделенные для доступа к соответствующему файлу. Доступ к файлу через структуру FILE, переданную fclose больше не допускается. Режим доступа (след. слайд) Режим доступа (след. слайд)
7 Режим доступа к файлу © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 7 Обозн.Описание "r" Открытие существующего файла только для чтения "w" Открытие файла только для записи. Если файл уже существует, его содержимое очищается. В противном случае файл создается. "a" Открытие файла для добавления, т.е. допускается только запись в конец файла. Если файл уже существует, его содержимое не изменяется, а новые данные дописываются в конец. В противном случае создается новый файл. "r+" Открытие существующего файла как для записи, так и для чтения. Содержимое файла не изменяется, файловый указатель установлен в начало файла. Поэтому при записи будет происходить замена исходного содержимого файла новыми данными. "w+" Открытие существующего файла как для записи, так и для чтения. Если файл уже существует, его содержимое очищается. В противном случае будет создан новый файл. "a+" Открытие файла как для чтения, так и для добавления. Если файл существует – его содержимое не изменяется, файловый указатель чтения установлен на начало файла. При записи файловый указатель смещается на конец файла, после чего восстанавливается исходная позиция. Если файл не существует – он создается.
8 Ввод/вывод в режиме "a+" © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 8 #include int main() { FILE *fp = fopen("testfile","a+"); int i,j; if( fp == NULL ){ printf("Cannot open file testfile\n"); } for(i=0;i
9 Ввод/вывод в режиме "a+" (2) © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 9 $./append Reading stage (ftell=0): EEEEEEEEEE Writing stage(ftell=0): Reading stage (ftell=10): EEEEEEEEEE Writing stage(ftell=10): $./append Reading stage (ftell=0): a a a a a a a a a a Writing stage(ftell=10): Reading stage (ftell=30): EEEEEEEEEE Writing stage(ftell=30): printf("Reading stage (ftell=%ld): ",ftell(fp)); for(j=0;j
10 Многофайловые программы 10 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Для структурирования исходного кода программы ее текст может быть распределен по нескольким файлам. Минимальные неделимые единицы разбиения программы: функции и внешние переменные. Только один файл может содержать функцию main Программные объекты могут быть глобальными в рамках файла. В этом случае они не доступны из функций, расположенных в других файлах. Локальными являются функции и внешние переменные, имеющие класс памяти static. Программные объекты могут быть глобальными в рамках программы, т.е. доступными из любой ее точки. Глобальными являются функции и внешние переменные с классом памяти extern.
11 Пример программы, состоящей из нескольких файлов с исходным кодом 11 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» int sumsub(int *i,int j) { int k = *i *i = k - j; return k + j; } int sumsub(int*,int); int main(){ int s, m=3; s = sumsub(&m, 5); printf("%d",m); } sumsub.cmain.c gcc –Wall –o sum sumsub.c main.c
12 Программа подлежащая разбиению на файлы © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 12 prog.c: #include int input(...){ // Some input actions... } int update(...){ // Update or preprocess input... } int process(...){ // Final input processing... } int main() {... input(...);... update(...);... process(...); }
13 Распределение программы по файлам © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 13 io.h: #ifndef IO_H #define IO_H #include "process.h" int input(...); #endif io.c: #include #include "io.h" int input(...){ // Input actions... } main.c: #include "io.h" #include "process.h" int main() {... input(...);... update(...);... process(...); } process.h: #ifndef PROCESS_H #define PROCESS_H int update(...); int process(...); #endif process.c: #include #include "process.h" int update(...){ // Update input... } int process(...){ // Final processing... }
14 Формат заголовочного файла © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 14 Строки 1,2 и 9 служат для защиты от многократного включения заголовочного файла. processing.h: 1 #ifndef // Уникальное имя препроцессорной переменной 2 #define // То же имя переменной 3 4 #include // Подключение необходимых файлов 5 // Список прототипов 6 int function1(int i, char j, float t); 7 float function2(int mas[], char t); 8 9 #endif // окончание ifdef в строке 1
15 Разработка многофайловых программ © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 15 io.h: #ifndef IO_H #define IO_H #include process.h int input(...); #endif process.h: #ifndef PROCESS_H #define PROCESS_H int update(...); int process(...); #endif main.c: #include #include io.h #include process.h int main() {... input(...);... update(...);... process(...); } –> prog.i: 00 #include 01 #ifndef IO_H 02 #define IO_H 03 #ifndef PROCESS_H 04 #define PROCESS_H 05 int update(...); 06 int process(...); 07 #endif 08 int input(...); 09 #endif 10 #ifndef PROCESS_H // ложь, определена в с #define PROCESS_H 12 int update(...); 13 int process(...); 1$ #endif int main() 17 { input(...); update(...); process(...); 24 }
/" title="Форматы файлов (bash скрипт) © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 16 #!/bin/bash # Create new directory inside student's home directory DIR="/home/STUDENTS/alex/test_dir" mkdir $DIR # Create file with content "123456" echo "123456" > /" class="link_thumb"> 16 Форматы файлов (bash скрипт) © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 16 #!/bin/bash # Create new directory inside student's home directory DIR="/home/STUDENTS/alex/test_dir" mkdir $DIR # Create file with content "123456" echo "123456" > /home/STUDENTS/alex/test_dir/file1.txt # Create new directory inside DIR DIR1="$DIR/nested_dir" mkdir $DIR1 # Put content of files FILE1 and FILE2 into FILE3 FILE1="$DIR1/file1.txt" FILE2="/home/STUDENTS/alex/test_dir/file2.txt" FILE3="/home/STUDENTS/alex/test_dir/nested_dir/file3.txt" cat $FILE1 $FILE2 > $FILE3 /"> /home/STUDENTS/alex/test_dir/file1.txt # Create new directory inside DIR DIR1="$DIR/nested_dir" mkdir $DIR1 # Put content of files FILE1 and FILE2 into FILE3 FILE1="$DIR1/file1.txt" FILE2="/home/STUDENTS/alex/test_dir/file2.txt" FILE3="/home/STUDENTS/alex/test_dir/nested_dir/file3.txt" cat $FILE1 $FILE2 > $FILE3"> /" title="Форматы файлов (bash скрипт) © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 16 #!/bin/bash # Create new directory inside student's home directory DIR="/home/STUDENTS/alex/test_dir" mkdir $DIR # Create file with content "123456" echo "123456" > /">
17 Форматы файлов (html страница) © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 17 Header #1 Today we have 3 news: Students from IV221 pass the exam Students from IV222 have consultation at New exam schedule ( pdf )
18 Форматы файлов (ini - файл) © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 18 ; directorys section [directorys] dir1="C:\\Programs\My" dir2="C:\\Programs\My\test" dir3="C:\\Programs\My\test1" ; owners section [owners] user1=Alex user2=Jim user3=Kate [files] file1="C:\\Programs\My\file1.txt" file2="C:\\Programs\My\file2.txt" file3="C:\\Programs\My\file3.txt" file4="C:\\Programs\My\test\jim" file5="C:\\Programs\My\test\kate" file6="C:\\Programs\My\test\alex" file7="C:\\Programs\My\test1\test.log" 19 Требования © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» Необходимо использовать функции, созданные в рамках ЛР 1. Создать отдельный файл с реализованными функциями strings.c. Разместить прототипы всех функций в заголовочный файл strings.h 2. Функции input() и output(), созданные в рамках ЛР 1, должны быть переработаны для работы с файлами и размещены в файле io.c/io.h. Выходные данные программ должны помещаться в файл. первый уровень сложности - название файла задается с клавиатуры; второй уровень сложности - изменяется входной файл.
20 Требования (2) © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» Функции по работе с форматами файлов также должны быть вынесены в отдельный файл format.c/format.h 4. В отчете о лабораторной работе должен присутствовать список тестовых входных данных, на которых проверялась корректность работы программы, и полученные результаты. Набор тестов должен обеспечивать проверку поведения программы для всех классов входных данных.
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.