Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <vector>
- #include <thread>
- #include <string>
- using namespace std;
- vector<char> vektor_obrade;
- void pisi(int br_blokova, int offset,char* ulazniFajl, char* kljuc)
- {
- char* buffer = new char[256];
- char* kljuc_za_xor = new char[256];
- char* rez = new char[256];
- ifstream file; //otvaranje fajla koji se obradjuje
- file.open(ulazniFajl, ios::binary | ios::in);
- file.seekg(offset+4);
- ifstream key_file; //otvaranje fajla u kom je kljuc za obradu prvog fajla
- key_file.open(kljuc, ios::binary|ios::in);
- key_file.seekg(4);
- key_file.read(kljuc_za_xor, 256);
- if(!file.is_open() || !key_file.is_open())
- {
- cout<<"Greska pri otvaranju nekog od fajlova."<<endl;
- }
- for(int i = 0; i < br_blokova && !file.eof(); i++)
- {
- file.read(buffer,256);
- for(int j = 0; j <= 255; j++)
- {
- vektor_obrade[offset + j + i*256 + 4] = buffer[j] ^ kljuc_za_xor[j];
- // rez[i] = buffer[i] + 1;
- }
- }
- }
- void napravi_fajl(char* ulazniFajl, char* izlazni, char* kljuc, int br_niti){
- int br_koraka;
- vector<thread> niti;
- ifstream file; // otvaranje fajla koji se obradjuje
- file.open(ulazniFajl, ios::binary | ios::in ); // otvori fajl i pici odmah na kraj da znam koji mi je offset/vel fajla
- //vektor_obrade.resize(file.tellg()); // uzmi velicinu fajla
- int velicina_fajla;
- file.read((char*)&velicina_fajla, sizeof(velicina_fajla));
- vektor_obrade.resize(velicina_fajla + 4);
- // vektor_obrade[0] =(char)velicina_fajla;
- file.seekg(0);
- file.read(vektor_obrade.data(), sizeof(velicina_fajla));
- cout << "velicina fajla: " << velicina_fajla << endl;
- br_koraka =velicina_fajla/(br_niti*256); // broj blokova koji ce svaka nit da izvrsi
- file.close();
- for(int i = 0; i < br_niti; i++){
- niti.push_back(thread(pisi,br_koraka,br_koraka*i*256,ulazniFajl, kljuc)); //offset - odakle krece svaka od niti
- }
- for(auto it = niti.begin(); it != niti.end(); it++){
- it->join();
- }
- fstream izlaz;
- izlaz.open(izlazni, ios::binary|ios::out);
- izlaz.write(vektor_obrade.data(), vektor_obrade.size());
- }
- int main(int argc, char* argv[])
- {
- char* ulazniFajl = argv[1];
- char* kljuc = argv[2];
- char* izlazni = argv[3];
- int br_niti = atoi(argv[4]);
- vector<thread> niti;
- napravi_fajl(ulazniFajl, izlazni, kljuc,br_niti);
- // int br_koraka = velicina/br_niti;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement