Upload
others
View
23
Download
0
Embed Size (px)
Citation preview
Потоци
Трифон Трифонов
Обектно-ориентирано програмиране,спец. Компютърни науки, 1 поток,
2018/19 г.
15 май 2019 г.
Трифон Трифонов (ООП 18/19) Потоци 15 май 2019 г. 1 / 14
Поточна обработка на данни
Взаимодействие на две програми
Програма А пресмята поредица от даннипростите числакадри от видео клипсписък от постове във Facebook/Twitter
Трифон Трифонов (ООП 18/19) Потоци 15 май 2019 г. 2 / 14
Поточна обработка на данни
Взаимодействие на две програми
Програма А пресмята поредица от даннипростите числакадри от видео клипсписък от постове във Facebook/Twitter
Програма Б обработва поредица от даннитърси числа-близнациправи снимки на “интересни” моменти от клипасъбира всички постове с линк към YouTube
Трифон Трифонов (ООП 18/19) Потоци 15 май 2019 г. 2 / 14
Поточна обработка на данни
Взаимодействие на две програми
Програма А пресмята поредица от даннипростите числакадри от видео клипсписък от постове във Facebook/Twitter
Програма Б обработва поредица от даннитърси числа-близнациправи снимки на “интересни” моменти от клипасъбира всички постове с линк към YouTube
Как да организираме работата на двете програми?
Трифон Трифонов (ООП 18/19) Потоци 15 май 2019 г. 2 / 14
Поточна обработка на данни
Абстракцията поток
производител −→ −→ консуматор
Трифон Трифонов (ООП 18/19) Потоци 15 май 2019 г. 3 / 14
Поточна обработка на данни
Обектно-ориентиран подход
cin >> number >> character >> string;
file << student << list << tree;
while (stream1 >> x) stream2 << f(x);
Трифон Трифонов (ООП 18/19) Потоци 15 май 2019 г. 4 / 14
Поточна обработка на данни
Конвейерна обработка
събирането на няколко потока в един голям поток
Трифон Трифонов (ООП 18/19) Потоци 15 май 2019 г. 5 / 14
Поточна обработка на данни
Конвейерна обработка
събирането на няколко потока в един голям потокефективна паралелна обработка
Трифон Трифонов (ООП 18/19) Потоци 15 май 2019 г. 5 / 14
Поточна обработка на данни
Конвейерна обработка
събирането на няколко потока в един голям потокефективна паралелна обработкасаморегулиращ се механизъм
Трифон Трифонов (ООП 18/19) Потоци 15 май 2019 г. 5 / 14
Поточна обработка на данни
Конвейерна обработка
събирането на няколко потока в един голям потокефективна паралелна обработкасаморегулиращ се механизъмПример: Unix pipes
Трифон Трифонов (ООП 18/19) Потоци 15 май 2019 г. 5 / 14
Поточна обработка на данни
Конвейерна обработка
събирането на няколко потока в един голям потокефективна паралелна обработкасаморегулиращ се механизъмПример: Unix pipesls | grep new | wc -l
Трифон Трифонов (ООП 18/19) Потоци 15 май 2019 г. 5 / 14
Поточна обработка на данни
Конвейерна обработка
събирането на няколко потока в един голям потокефективна паралелна обработкасаморегулиращ се механизъмПример: Unix pipesls | grep new | wc -l
Файловете като производители или консуматори на потоци
Трифон Трифонов (ООП 18/19) Потоци 15 май 2019 г. 5 / 14
Поточна обработка на данни
Поточен буфер
Какво представлява буферът?
Трифон Трифонов (ООП 18/19) Потоци 15 май 2019 г. 6 / 14
Поточна обработка на данни
Поточен буфер
Какво представлява буферът?Кога е нужен буфер?
Трифон Трифонов (ООП 18/19) Потоци 15 май 2019 г. 6 / 14
Поточна обработка на данни
Поточен буфер
Какво представлява буферът?Кога е нужен буфер?Кога буферът вреди?
Трифон Трифонов (ООП 18/19) Потоци 15 май 2019 г. 6 / 14
Поточна обработка на данни
Поточен буфер
Какво представлява буферът?Кога е нужен буфер?Кога буферът вреди?
H e l l o , w o r l d ! \n
Трифон Трифонов (ООП 18/19) Потоци 15 май 2019 г. 6 / 14
Работа с потоци
Стандартни потоци и пренасочване
Стандартен изходен поток cout (stdout)Пренасочване на изхода:ls > filelist.txt
Трифон Трифонов (ООП 18/19) Потоци 15 май 2019 г. 7 / 14
Работа с потоци
Стандартни потоци и пренасочване
Стандартен изходен поток cout (stdout)Пренасочване на изхода:ls > filelist.txt
Стандартен входен поток cin (stdin)Пренасочване на вход и на изход:grep password < email.txt > password.txt
Трифон Трифонов (ООП 18/19) Потоци 15 май 2019 г. 7 / 14
Работа с потоци
Стандартни потоци и пренасочване
Стандартен изходен поток cout (stdout)Пренасочване на изхода:ls > filelist.txt
Стандартен входен поток cin (stdin)Пренасочване на вход и на изход:grep password < email.txt > password.txt
Стандартен поток за грешки cerr (stderr)Пренасочване на изход за грешки:mv *.dat /data 2> errors.txt
Трифон Трифонов (ООП 18/19) Потоци 15 май 2019 г. 7 / 14
Работа с потоци
Стандартни потоци и пренасочване
Стандартен изходен поток cout (stdout)Пренасочване на изхода:ls > filelist.txt
Стандартен входен поток cin (stdin)Пренасочване на вход и на изход:grep password < email.txt > password.txt
Стандартен поток за грешки cerr (stderr)Пренасочване на изход за грешки:mv *.dat /data 2> errors.txt
Стандартен поток за дневник clog (отново stderr)
Трифон Трифонов (ООП 18/19) Потоци 15 май 2019 г. 7 / 14
Работа с потоци
Форматиран и неформатиран вход/изход
Текстова и двоична информация
Трифон Трифонов (ООП 18/19) Потоци 15 май 2019 г. 8 / 14
Работа с потоци
Форматиран и неформатиран вход/изход
Текстова и двоична информацияASCII (char)
Трифон Трифонов (ООП 18/19) Потоци 15 май 2019 г. 8 / 14
Работа с потоци
Форматиран и неформатиран вход/изход
Текстова и двоична информацияASCII (char)Служебни символи
Трифон Трифонов (ООП 18/19) Потоци 15 май 2019 г. 8 / 14
Работа с потоци
Форматиран и неформатиран вход/изход
Текстова и двоична информацияASCII (char)Служебни символиКодиращи таблици
Трифон Трифонов (ООП 18/19) Потоци 15 май 2019 г. 8 / 14
Работа с потоци
Форматиран и неформатиран вход/изход
Текстова и двоична информацияASCII (char)Служебни символиКодиращи таблициUnicode (wchar_t)
Трифон Трифонов (ООП 18/19) Потоци 15 май 2019 г. 8 / 14
Работа с потоци
Форматиран и неформатиран вход/изход
Текстова и двоична информацияASCII (char)Служебни символиКодиращи таблициUnicode (wchar_t)UTF-8
Трифон Трифонов (ООП 18/19) Потоци 15 май 2019 г. 8 / 14
Работа с потоци Потоци в C++
Поточна йерархия в C++
basic_ios
basic_istream basic_ostream
basic_iostream
basic_ifstream basic_ofstream
basic_fstream
Трифон Трифонов (ООП 18/19) Потоци 15 май 2019 г. 9 / 14
Работа с потоци Потоци в C++
Изход на поток
Неформатиран изход:
ostream& put(char);ostream& write(const char*, streamsize);
Трифон Трифонов (ООП 18/19) Потоци 15 май 2019 г. 10 / 14
Работа с потоци Потоци в C++
Изход на поток
Неформатиран изход:
ostream& put(char);ostream& write(const char*, streamsize);
Форматиран изход:
ostream& operator<<(ostream&, T);
Трифон Трифонов (ООП 18/19) Потоци 15 май 2019 г. 10 / 14
Работа с потоци Потоци в C++
Вход от поток
Неформатиран вход:
istream& get(char&);istream& get(char*,streamsize,char);istream& getline(char*,streamsize,char);streamsize gcount() const;istream& read(char*, streamsize);
Трифон Трифонов (ООП 18/19) Потоци 15 май 2019 г. 11 / 14
Работа с потоци Потоци в C++
Вход от поток
Неформатиран вход:
istream& get(char&);istream& get(char*,streamsize,char);istream& getline(char*,streamsize,char);streamsize gcount() const;istream& read(char*, streamsize);
Форматиран вход:
istream& operator>>(istream&, T&);
Трифон Трифонов (ООП 18/19) Потоци 15 май 2019 г. 11 / 14
Работа с потоци Потоци в C++
Вход от поток
Неформатиран вход:
istream& get(char&);istream& get(char*,streamsize,char);istream& getline(char*,streamsize,char);streamsize gcount() const;istream& read(char*, streamsize);
Форматиран вход:
istream& operator>>(istream&, T&);
Допълнителни функции:int peek();istream& putback(char);
Трифон Трифонов (ООП 18/19) Потоци 15 май 2019 г. 11 / 14
Работа с потоци Потоци в C++
Низови потоци
#include <sstream>
Входен поток от низ: istringstream
Пример:
char s[] = "1 2 3";istringstream iss(s);int a, b, c;iss >> a >> b >> c;
Трифон Трифонов (ООП 18/19) Потоци 15 май 2019 г. 12 / 14
Работа с потоци Потоци в C++
Низови потоци
#include <sstream>
Входен поток от низ: istringstream
Пример:
char s[] = "1 2 3";istringstream iss(s);int a, b, c;iss >> a >> b >> c;
Изходен поток към низ: ostringstream
Пример:
ostringstream oss;oss << 1.2 << ’ ’ << 3.4;cout << oss.str();
Трифон Трифонов (ООП 18/19) Потоци 15 май 2019 г. 12 / 14
Работа с потоци Потоци в C++
Състояние на поток
Флагове за състояние:
iostategoodbit badbit eofbit failbit
0 1 2 4
Трифон Трифонов (ООП 18/19) Потоци 15 май 2019 г. 13 / 14
Работа с потоци Потоци в C++
Състояние на поток
Флагове за състояние:
iostategoodbit badbit eofbit failbit
0 1 2 4
Селектори:bool good() const; bool eof() const;bool fail() const; bool bad() const;iostate rdstate() const;
Мутатор:void clear(iostate = 0);
Примери:if (cin.rdstate() & (eofbit | badbit)) ...cin.clear(failbit);if(cin)... if(!cin)...
Трифон Трифонов (ООП 18/19) Потоци 15 май 2019 г. 13 / 14
Работа с потоци Потоци в C++
Потокови манипулатори
#include <iomanip>stream << data1 << manipulator << data2;
Манипулатори за изход: endl, ends, flush
Трифон Трифонов (ООП 18/19) Потоци 15 май 2019 г. 14 / 14
Работа с потоци Потоци в C++
Потокови манипулатори
#include <iomanip>stream << data1 << manipulator << data2;
Манипулатори за изход: endl, ends, flushМанипулатори за бройна система: hex, oct, dec
Трифон Трифонов (ООП 18/19) Потоци 15 май 2019 г. 14 / 14
Работа с потоци Потоци в C++
Потокови манипулатори
#include <iomanip>stream << data1 << manipulator << data2;
Манипулатори за изход: endl, ends, flushМанипулатори за бройна система: hex, oct, decМанипулатори за поле: setw, setfill, left, right, internal
Трифон Трифонов (ООП 18/19) Потоци 15 май 2019 г. 14 / 14
Работа с потоци Потоци в C++
Потокови манипулатори
#include <iomanip>stream << data1 << manipulator << data2;
Манипулатори за изход: endl, ends, flushМанипулатори за бройна система: hex, oct, decМанипулатори за поле: setw, setfill, left, right, internalМанипулатори за дробни числа: fixed, scientific,setprecision
Трифон Трифонов (ООП 18/19) Потоци 15 май 2019 г. 14 / 14
Работа с потоци Потоци в C++
Потокови манипулатори
#include <iomanip>stream << data1 << manipulator << data2;
Манипулатори за изход: endl, ends, flushМанипулатори за бройна система: hex, oct, decМанипулатори за поле: setw, setfill, left, right, internalМанипулатори за дробни числа: fixed, scientific,setprecision
Манипулатори за формат: setiosflags, setbase
Трифон Трифонов (ООП 18/19) Потоци 15 май 2019 г. 14 / 14
Работа с потоци Потоци в C++
Потокови манипулатори
#include <iomanip>stream << data1 << manipulator << data2;
Манипулатори за изход: endl, ends, flushМанипулатори за бройна система: hex, oct, decМанипулатори за поле: setw, setfill, left, right, internalМанипулатори за дробни числа: fixed, scientific,setprecision
Манипулатори за формат: setiosflags, setbase. . . и много други
Трифон Трифонов (ООП 18/19) Потоци 15 май 2019 г. 14 / 14