From 3a67adcfc5cf83317cbe0ce01d23d57226795568 Mon Sep 17 00:00:00 2001 From: Aayush Vats <220010001@iitdh.ac.in> Date: Tue, 3 Sep 2024 00:24:21 +0530 Subject: [PATCH] almost there! --- lab2/src/makefile | 18 ++ lab2/src/moss.pl | 358 +++++++++++++++++++++++++++++++++ lab2/src/part1.out | Bin 86496 -> 84928 bytes lab2/src/part1_searcher.cpp | 2 +- lab2/src/part2_partitioner.cpp | 127 ++++++++++++ lab2/src/part2_partitioner.out | Bin 0 -> 78752 bytes lab2/src/part2_searcher.cpp | 47 +++++ lab2/src/part2_searcher.out | Bin 0 -> 19360 bytes lab2/src/part2part.out | Bin 0 -> 34712 bytes lab2/src/part3_partitioner.cpp | 156 ++++++++++++++ lab2/src/part3_partitioner.out | Bin 0 -> 80896 bytes lab2/src/part3_searcher.cpp | 68 +++++++ lab2/src/part3_searcher.out | Bin 0 -> 92656 bytes 13 files changed, 775 insertions(+), 1 deletion(-) create mode 100644 lab2/src/moss.pl create mode 100644 lab2/src/part2_partitioner.cpp create mode 100755 lab2/src/part2_partitioner.out create mode 100644 lab2/src/part2_searcher.cpp create mode 100755 lab2/src/part2_searcher.out create mode 100755 lab2/src/part2part.out create mode 100644 lab2/src/part3_partitioner.cpp create mode 100755 lab2/src/part3_partitioner.out create mode 100644 lab2/src/part3_searcher.cpp create mode 100755 lab2/src/part3_searcher.out diff --git a/lab2/src/makefile b/lab2/src/makefile index 938da6b..6e5cf58 100644 --- a/lab2/src/makefile +++ b/lab2/src/makefile @@ -6,6 +6,24 @@ part1.out: part1_searcher.cpp run-part1: part1.out ./part1.out file.txt NGTNIJGK 0 67108863 +part2_partitioner.out: part2_partitioner.cpp + g++ -g part2_partitioner.cpp -o part2_partitioner.out + +part2_searcher.out: part2_searcher.cpp + g++ -g part2_searcher.cpp -o part2_searcher.out + +run-part2: part2_partitioner.out part2_searcher.out + ./part2_partitioner.out file.txt NGTNIJGK 0 67108863 8388608 + +part3_partitioner.out: part3_partitioner.cpp + g++ -g part3_partitioner.cpp -o part3_partitioner.out + +part3_searcher.out: part3_searcher.cpp + g++ -g part3_searcher.cpp -o part3_searcher.out + +run-part3: part3_partitioner.out part3_searcher.out + ./part3_partitioner.out file.txt NGTNIJGK 0 67108863 8388608 + clean-part1: rm part1.out diff --git a/lab2/src/moss.pl b/lab2/src/moss.pl new file mode 100644 index 0000000..cb935f6 --- /dev/null +++ b/lab2/src/moss.pl @@ -0,0 +1,358 @@ +#!/usr/bin/env perl +# +# Please read all the comments down to the line that says "STOP". +# These comments are divided into three sections: +# +# 1. usage instructions +# 2. installation instructions +# 3. standard copyright +# +# Feel free to share this script with other instructors of programming +# classes, but please do not place the script in a publicly accessible +# place. Comments, questions, and bug reports should be sent to +# moss-request@moss.stanford.edu. +# +# IMPORTANT: This script is known to work on Unix and on Windows using Cygwin. +# It is not known to work on other ways of using Perl under Windows. If the +# script does not work for you under Windows, you can try the email-based +# version for Windows (available on the Moss home page). +# + +# +# Section 1. Usage instructions +# +# moss [-l language] [-d] [-b basefile1] ... [-b basefilen] [-m #] [-c "string"] file1 file2 file3 ... +# +# The -l option specifies the source language of the tested programs. +# Moss supports many different languages; see the variable "languages" below for the +# full list. +# +# Example: Compare the lisp programs foo.lisp and bar.lisp: +# +# moss -l lisp foo.lisp bar.lisp +# +# +# The -d option specifies that submissions are by directory, not by file. +# That is, files in a directory are taken to be part of the same program, +# and reported matches are organized accordingly by directory. +# +# Example: Compare the programs foo and bar, which consist of .c and .h +# files in the directories foo and bar respectively. +# +# moss -d foo/*.c foo/*.h bar/*.c bar/*.h +# +# Example: Each program consists of the *.c and *.h files in a directory under +# the directory "assignment1." +# +# moss -d assignment1/*/*.h assignment1/*/*.c +# +# +# The -b option names a "base file". Moss normally reports all code +# that matches in pairs of files. When a base file is supplied, +# program code that also appears in the base file is not counted in matches. +# A typical base file will include, for example, the instructor-supplied +# code for an assignment. Multiple -b options are allowed. You should +# use a base file if it is convenient; base files improve results, but +# are not usually necessary for obtaining useful information. +# +# IMPORTANT: Unlike previous versions of moss, the -b option *always* +# takes a single filename, even if the -d option is also used. +# +# Examples: +# +# Submit all of the C++ files in the current directory, using skeleton.cc +# as the base file: +# +# moss -l cc -b skeleton.cc *.cc +# +# Submit all of the ML programs in directories asn1.96/* and asn1.97/*, where +# asn1.97/instructor/example.ml and asn1.96/instructor/example.ml contain the base files. +# +# moss -l ml -b asn1.97/instructor/example.ml -b asn1.96/instructor/example.ml -d asn1.97/*/*.ml asn1.96/*/*.ml +# +# The -m option sets the maximum number of times a given passage may appear +# before it is ignored. A passage of code that appears in many programs +# is probably legitimate sharing and not the result of plagiarism. With -m N, +# any passage appearing in more than N programs is treated as if it appeared in +# a base file (i.e., it is never reported). Option -m can be used to control +# moss' sensitivity. With -m 2, moss reports only passages that appear +# in exactly two programs. If one expects many very similar solutions +# (e.g., the short first assignments typical of introductory programming +# courses) then using -m 3 or -m 4 is a good way to eliminate all but +# truly unusual matches between programs while still being able to detect +# 3-way or 4-way plagiarism. With -m 1000000 (or any very +# large number), moss reports all matches, no matter how often they appear. +# The -m setting is most useful for large assignments where one also a base file +# expected to hold all legitimately shared code. The default for -m is 10. +# +# Examples: +# +# moss -l pascal -m 2 *.pascal +# moss -l cc -m 1000000 -b mycode.cc asn1/*.cc +# +# +# The -c option supplies a comment string that is attached to the generated +# report. This option facilitates matching queries submitted with replies +# received, especially when several queries are submitted at once. +# +# Example: +# +# moss -l scheme -c "Scheme programs" *.sch +# +# The -n option determines the number of matching files to show in the results. +# The default is 250. +# +# Example: +# moss -c java -n 200 *.java +# The -x option sends queries to the current experimental version of the server. +# The experimental server has the most recent Moss features and is also usually +# less stable (read: may have more bugs). +# +# Example: +# +# moss -x -l ml *.ml +# + + +# +# Section 2. Installation instructions. +# +# You may need to change the very first line of this script +# if perl is not in /usr/bin on your system. Just replace /usr/bin +# with the pathname of the directory where perl resides. +# + +# +# 3. Standard Copyright +# +#Copyright (c) 1997 The Regents of the University of California. +#All rights reserved. +# +#Permission to use, copy, modify, and distribute this software for any +#purpose, without fee, and without written agreement is hereby granted, +#provided that the above copyright notice and the following two +#paragraphs appear in all copies of this software. +# +#IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR +#DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT +#OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF +#CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +#THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, +#INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY +#AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +#ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO +#PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +# +# +# STOP. It should not be necessary to change anything below this line +# to use the script. +# +use IO::Socket; + +# +# As of the date this script was written, the following languages were supported. This script will work with +# languages added later however. Check the moss website for the full list of supported languages. +# +@languages = ("c", "cc", "java", "ml", "pascal", "ada", "lisp", "scheme", "haskell", "fortran", "ascii", "vhdl", "perl", "matlab", "python", "mips", "prolog", "spice", "vb", "csharp", "modula2", "a8086", "javascript", "plsql"); + +$server = 'moss.stanford.edu'; +$port = '7690'; +$noreq = "Request not sent."; +$usage = "usage: moss [-x] [-l language] [-d] [-b basefile1] ... [-b basefilen] [-m #] [-c \"string\"] file1 file2 file3 ..."; + +# +# The userid is used to authenticate your queries to the server; don't change it! +# +$userid=717747575; + +# +# Process the command line options. This is done in a non-standard +# way to allow multiple -b's. +# +$opt_l = "c"; # default language is c +$opt_m = 10; +$opt_d = 0; +$opt_x = 0; +$opt_c = ""; +$opt_n = 250; +$bindex = 0; # this becomes non-zero if we have any base files + +while (@ARGV && ($_ = $ARGV[0]) =~ /^-(.)(.*)/) { + ($first,$rest) = ($1,$2); + + shift(@ARGV); + if ($first eq "d") { + $opt_d = 1; + next; + } + if ($first eq "b") { + if($rest eq '') { + die "No argument for option -b.\n" unless @ARGV; + $rest = shift(@ARGV); + } + $opt_b[$bindex++] = $rest; + next; + } + if ($first eq "l") { + if ($rest eq '') { + die "No argument for option -l.\n" unless @ARGV; + $rest = shift(@ARGV); + } + $opt_l = $rest; + next; + } + if ($first eq "m") { + if($rest eq '') { + die "No argument for option -m.\n" unless @ARGV; + $rest = shift(@ARGV); + } + $opt_m = $rest; + next; + } + if ($first eq "c") { + if($rest eq '') { + die "No argument for option -c.\n" unless @ARGV; + $rest = shift(@ARGV); + } + $opt_c = $rest; + next; + } + if ($first eq "n") { + if($rest eq '') { + die "No argument for option -n.\n" unless @ARGV; + $rest = shift(@ARGV); + } + $opt_n = $rest; + next; + } + if ($first eq "x") { + $opt_x = 1; + next; + } + # + # Override the name of the server. This is used for testing this script. + # + if ($first eq "s") { + $server = shift(@ARGV); + next; + } + # + # Override the port. This is used for testing this script. + # + if ($first eq "p") { + $port = shift(@ARGV); + next; + } + die "Unrecognized option -$first. $usage\n"; +} + +# +# Check a bunch of things first to ensure that the +# script will be able to run to completion. +# + +# +# Make sure all the argument files exist and are readable. +# +print "Checking files . . . \n"; +$i = 0; +while($i < $bindex) +{ + die "Base file $opt_b[$i] does not exist. $noreq\n" unless -e "$opt_b[$i]"; + die "Base file $opt_b[$i] is not readable. $noreq\n" unless -r "$opt_b[$i]"; + die "Base file $opt_b is not a text file. $noreq\n" unless -T "$opt_b[$i]"; + $i++; +} +foreach $file (@ARGV) +{ + die "File $file does not exist. $noreq\n" unless -e "$file"; + die "File $file is not readable. $noreq\n" unless -r "$file"; + die "File $file is not a text file. $noreq\n" unless -T "$file"; +} + +if ("@ARGV" eq '') { + die "No files submitted.\n $usage"; +} +print "OK\n"; + +# +# Now the real processing begins. +# + + +$sock = new IO::Socket::INET ( + PeerAddr => $server, + PeerPort => $port, + Proto => 'tcp', + ); +die "Could not connect to server $server: $!\n" unless $sock; +$sock->autoflush(1); + +sub read_from_server { + $msg = <$sock>; + print $msg; +} + +sub upload_file { + local ($file, $id, $lang) = @_; +# +# The stat function does not seem to give correct filesizes on windows, so +# we compute the size here via brute force. +# + open(F,$file); + $size = 0; + while () { + $size += length($_); + } + close(F); + + print "Uploading $file ..."; + print $sock "file $id $lang $size $file\n"; + open(F,$file); + while () { + print $sock $_; + } + close(F); + print "done.\n"; +} + + +print $sock "moss $userid\n"; # authenticate user +print $sock "directory $opt_d\n"; +print $sock "X $opt_x\n"; +print $sock "maxmatches $opt_m\n"; +print $sock "show $opt_n\n"; + +# +# confirm that we have a supported languages +# +print $sock "language $opt_l\n"; +$msg = <$sock>; +chop($msg); +if ($msg eq "no") { + print $sock "end\n"; + die "Unrecognized language $opt_l."; +} + + +# upload any base files +$i = 0; +while($i < $bindex) { + &upload_file($opt_b[$i++],0,$opt_l); +} + +$setid = 1; +foreach $file (@ARGV) { + &upload_file($file,$setid++,$opt_l); +} + +print $sock "query 0 $opt_c\n"; +print "Query submitted. Waiting for the server's response.\n"; +&read_from_server(); +print $sock "end\n"; +close($sock); + + + + diff --git a/lab2/src/part1.out b/lab2/src/part1.out index f1d66d280ccfe6ff8078ef10fc236ec6c28a346c..58b76b7d1e98d8e326b1538ba3f9c00fc2e4a9f2 100755 GIT binary patch literal 84928 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%0DHiKZQA2 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 diff --git a/lab2/src/part1_searcher.cpp b/lab2/src/part1_searcher.cpp index 5ca0d45..dfa5f94 100644 --- a/lab2/src/part1_searcher.cpp +++ b/lab2/src/part1_searcher.cpp @@ -24,7 +24,7 @@ int main(int argc, char **argv) int search_start_position = atoi(argv[3]); int search_end_position = atoi(argv[4]); int find = 0; - int pid = getpid(); + pid_t pid = getpid(); ifstream file(file_to_search_in, ios::binary); int len2 = search_end_position - search_start_position; string buffer; diff --git a/lab2/src/part2_partitioner.cpp b/lab2/src/part2_partitioner.cpp new file mode 100644 index 0000000..dd24925 --- /dev/null +++ b/lab2/src/part2_partitioner.cpp @@ -0,0 +1,127 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace std; + +int main(int argc, char **argv) +{ + if (argc != 6) + { + cout << "usage: ./partitioner.out \nprovided arguments:\n"; + for (int i = 0; i < argc; i++) + cout << argv[i] << "\n"; + return -1; + } + + char *file_to_search_in = argv[1]; + char *pattern_to_search_for = argv[2]; + int search_start_position = atoi(argv[3]); + int search_end_position = atoi(argv[4]); + int max_chunk_size = atoi(argv[5]); + + pid_t my_pid = getpid(); + pid_t searcher_pid; + pid_t children[2]; + + cout << "[" << my_pid << "] start position = " << search_start_position << " ; end position = " << search_end_position << "\n"; + + if (search_end_position - search_start_position >= max_chunk_size) + { + int mid = (search_start_position + search_end_position) / 2; + + children[0] = fork(); + + if (children[0] == 0) + { + //Left Child + char start_str[10], mid_str[10], chunk_size_str[10]; + + string temp = to_string(search_start_position); + strcpy(start_str, temp.c_str()); + + temp = to_string(mid); + strcpy(mid_str, temp.c_str()); + + temp = to_string(max_chunk_size); + strcpy(chunk_size_str, temp.c_str()); + + char *args[] = { "./part2_partitioner.out",file_to_search_in , pattern_to_search_for, start_str, mid_str, chunk_size_str, NULL }; + execv("./part2_partitioner.out", args); + } + else + { + // Parent process + cout << "[" << my_pid << "] forked left child " << children[0] << "\n"; + } + + children[1] = fork(); + if (children[1] == 0) + { + //Right Child + char mid_next[10], end_str[10], chunk_size_str[10]; + + string temp = to_string(mid+1); + strcpy(mid_next, temp.c_str()); + + temp = to_string(search_end_position); + strcpy(end_str, temp.c_str()); + + temp = to_string(max_chunk_size); + strcpy(chunk_size_str, temp.c_str()); + + char *args[] = { "./part2_partitioner.out", file_to_search_in, pattern_to_search_for, mid_next, end_str, chunk_size_str, NULL }; + execv("./part2_partitioner.out", args); + } + else + { + // Parent process + cout << "[" << my_pid << "] forked right child " << children[1] << "\n"; + } + + waitpid(children[0], NULL, 0); + cout << "[" << my_pid << "] left child returned\n"; + waitpid(children[1], NULL, 0); + cout << "[" << my_pid << "] right child returned\n"; + } + else + { + searcher_pid = fork(); + if (searcher_pid == 0) + { + // Child process + char start_str[10], end_str[10]; + sprintf(start_str, "%d", search_start_position); + sprintf(end_str, "%d", search_end_position); + char *args[] = { "./part2_searcher.out", file_to_search_in, pattern_to_search_for, start_str, end_str ,NULL}; + execv("./part2_searcher.out", args); + } + else + { + // Parent process + cout << "[" << my_pid << "] forked searcher child " << searcher_pid << "\n"; + } + + waitpid(searcher_pid, NULL, 0); + cout << "[" << my_pid << "] searcher child returned \n"; + } + + //TODO + //cout << "[" << my_pid << "] start position = " << search_start_position << " ; end position = " << search_end_position << "\n"; + //cout << "[" << my_pid << "] forked left child " << my_children[0] << "\n"; + //cout << "[" << my_pid << "] forked right child " << my_children[1] << "\n"; + //cout << "[" << my_pid << "] left child returned\n"; + //cout << "[" << my_pid << "] right child returned\n"; + //cout << "[" << my_pid << "] left child returned\n"; + //cout << "[" << my_pid << "] right child returned\n";*/ + //cout << "[" << my_pid << "] forked searcher child " << searcher_pid << "\n"; + //cout << "[" << my_pid << "] searcher child returned \n"; + //cout << "[" << my_pid << "] received SIGTERM\n"; //applicable for Part III of the assignment + + return 0; +} \ No newline at end of file diff --git a/lab2/src/part2_partitioner.out b/lab2/src/part2_partitioner.out new file mode 100755 index 0000000000000000000000000000000000000000..311f330b35d8c337e159f95a97b8e42e02ae207b GIT binary patch literal 78752 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 E4;#WnP5=M^ literal 0 HcmV?d00001 diff --git a/lab2/src/part2_searcher.cpp b/lab2/src/part2_searcher.cpp new file mode 100644 index 0000000..85b8617 --- /dev/null +++ b/lab2/src/part2_searcher.cpp @@ -0,0 +1,47 @@ +#include +#include +#include +#include +#include +#include + +using namespace std; + +int main(int argc, char **argv) +{ + auto startmain = chrono::high_resolution_clock::now(); + if(argc != 5) + { + cout <<"usage: ./partitioner.out \nprovided arguments:\n"; + for(int i = 0; i < argc; i++) + cout << argv[i] << "\n"; + return -1; + } + + char *file_to_search_in = argv[1]; + char *pattern_to_search_for = argv[2]; + int len = sizeof(pattern_to_search_for); + int search_start_position = atoi(argv[3]); + int search_end_position = atoi(argv[4]); + int find = 0; + pid_t pid = getpid(); + ifstream file(file_to_search_in, ios::binary); + int len2 = search_end_position - search_start_position; + string buffer; + buffer.resize(len2); + file.seekg(search_start_position); + file.read(&buffer[0], len2); + //TODO + auto a = buffer.find(pattern_to_search_for); + if(a != string::npos) { + cout << "[" << pid << "]" << " found at" << " " << a + search_start_position << endl; + } + else { + cout << "[" << pid << "]" << " didn't find\n"; + } + + auto endmain = std::chrono::high_resolution_clock::now(); + chrono::duration mainduration = endmain - startmain; + cout << mainduration.count() << endl; + return 0; +} diff --git a/lab2/src/part2_searcher.out b/lab2/src/part2_searcher.out new file mode 100755 index 0000000000000000000000000000000000000000..6807001a1eaee0e933a92833125fabc8a79826bc GIT binary patch literal 19360 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 +#include +#include +#include +#include +#include +#include +#include + +using namespace std; + +void handler(int signo, siginfo_t *info, void *context) +{ + if(signo == SIGTERM) + { + cout <<"["<< getpid()<<"] "<<"received SIGTERM\n"; + exit(0); + } +} + +int main(int argc, char **argv) +{ + + struct sigaction sa; + memset(&sa, 0, sizeof(struct sigaction)); + sa.sa_sigaction = &handler; + if (sigaction(SIGTERM, &sa, NULL) == -1) + { + perror("sigaction"); + return EXIT_FAILURE; + } + + if (argc != 6) + { + cout << "usage: ./partitioner.out \nprovided arguments:\n"; + for (int i = 0; i < argc; i++) + cout << argv[i] << "\n"; + return -1; + } + + char *file_to_search_in = argv[1]; + char *pattern_to_search_for = argv[2]; + int search_start_position = atoi(argv[3]); + int search_end_position = atoi(argv[4]); + int max_chunk_size = atoi(argv[5]); + + pid_t my_pid = getpid(); + pid_t searcher_pid; + pid_t children[2]; + + cout << "[" << my_pid << "] start position = " << search_start_position << " ; end position = " << search_end_position << "\n"; + + if (search_end_position - search_start_position >= max_chunk_size) + { + int mid = (search_start_position + search_end_position) / 2; + + children[0] = fork(); + + if (children[0] == 0) + { + //Left Child + char start_str[10], mid_str[10], chunk_size_str[10]; + + string temp = to_string(search_start_position); + strcpy(start_str, temp.c_str()); + + temp = to_string(mid); + strcpy(mid_str, temp.c_str()); + + temp = to_string(max_chunk_size); + strcpy(chunk_size_str, temp.c_str()); + + char *args[] = { "./part3_partitioner.out",file_to_search_in , pattern_to_search_for, start_str, mid_str, chunk_size_str, NULL }; + execv("./part3_partitioner.out", args); + } + else + { + // Parent process + cout << "[" << my_pid << "] forked left child " << children[0] << "\n"; + } + + children[1] = fork(); + if (children[1] == 0) + { + //Right Child + char mid_next[10], end_str[10], chunk_size_str[10]; + + string temp = to_string(mid+1); + strcpy(mid_next, temp.c_str()); + + temp = to_string(search_end_position); + strcpy(end_str, temp.c_str()); + + temp = to_string(max_chunk_size); + strcpy(chunk_size_str, temp.c_str()); + + char *args[] = { "./part3_partitioner.out", file_to_search_in, pattern_to_search_for, mid_next, end_str, chunk_size_str, NULL }; + execv("./part3_partitioner.out", args); + } + else + { + // Parent process + cout << "[" << my_pid << "] forked right child " << children[1] << "\n"; + } + + for(int i = 0; i < 2; ++i) { + pid_t returned_pid = wait(NULL); + if(returned_pid == children[0]) { + cout << "[" << my_pid << "] left child returned\n"; + } + else { + cout << "[" << my_pid << "] right child returned\n"; + } + } + + // waitpid(children[0], NULL, 0); + // cout << "[" << my_pid << "] left child returned\n"; + // waitpid(children[1], NULL, 0); + // cout << "[" << my_pid << "] right child returned\n"; + } + else + { + searcher_pid = fork(); + if (searcher_pid == 0) + { + // Child process + char start_str[10], end_str[10]; + sprintf(start_str, "%d", search_start_position); + sprintf(end_str, "%d", search_end_position); + char *args[] = { "./part3_searcher.out", file_to_search_in, pattern_to_search_for, start_str, end_str ,NULL}; + execv("./part3_searcher.out", args); + } + else + { + // Parent process + cout << "[" << my_pid << "] forked searcher child " << searcher_pid << "\n"; + } + + waitpid(searcher_pid, NULL, 0); + cout << "[" << my_pid << "] searcher child returned \n"; + } + + //TODO + //cout << "[" << my_pid << "] start position = " << search_start_position << " ; end position = " << search_end_position << "\n"; + //cout << "[" << my_pid << "] forked left child " << my_children[0] << "\n"; + //cout << "[" << my_pid << "] forked right child " << my_children[1] << "\n"; + //cout << "[" << my_pid << "] left child returned\n"; + //cout << "[" << my_pid << "] right child returned\n"; + //cout << "[" << my_pid << "] left child returned\n"; + //cout << "[" << my_pid << "] right child returned\n";*/ + //cout << "[" << my_pid << "] forked searcher child " << searcher_pid << "\n"; + //cout << "[" << my_pid << "] searcher child returned \n"; + //cout << "[" << my_pid << "] received SIGTERM\n"; //applicable for Part III of the assignment + + return 0; +} \ No newline at end of file diff --git a/lab2/src/part3_partitioner.out b/lab2/src/part3_partitioner.out new file mode 100755 index 0000000000000000000000000000000000000000..3d44edae28be3df0a71c8aa5c733f5619144b632 GIT binary patch literal 80896 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 literal 0 HcmV?d00001 diff --git a/lab2/src/part3_searcher.cpp b/lab2/src/part3_searcher.cpp new file mode 100644 index 0000000..d5ccaf2 --- /dev/null +++ b/lab2/src/part3_searcher.cpp @@ -0,0 +1,68 @@ +#include +#include +#include +#include +#include +#include + +using namespace std; + +void handler(int signo, siginfo_t *info, void *context) +{ + if(signo == SIGTERM) + { + cout <<"["<< getpid()<<"] "<<"received SIGTERM\n"; + exit(0); + } +} + +int main(int argc, char **argv) +{ + auto startmain = chrono::high_resolution_clock::now(); + struct sigaction sa; + memset(&sa, 0, sizeof(struct sigaction)); + sa.sa_sigaction = &handler; + if (sigaction(SIGTERM, &sa, NULL) == -1) + { + perror("sigaction"); + return EXIT_FAILURE; + } + + pid_t pgid = getpgid(getpid()); + + if(argc != 5) + { + cout <<"usage: ./partitioner.out \nprovided arguments:\n"; + for(int i = 0; i < argc; i++) + cout << argv[i] << "\n"; + return -1; + } + + char *file_to_search_in = argv[1]; + char *pattern_to_search_for = argv[2]; + int len = sizeof(pattern_to_search_for); + int search_start_position = atoi(argv[3]); + int search_end_position = atoi(argv[4]); + int find = 0; + pid_t pid = getpid(); + ifstream file(file_to_search_in, ios::binary); + int len2 = search_end_position - search_start_position; + string buffer; + buffer.resize(len2); + file.seekg(search_start_position); + file.read(&buffer[0], len2); + //TODO + auto a = buffer.find(pattern_to_search_for); + if(a != string::npos) { + cout << "[" << pid << "]" << " found at" << " " << a + search_start_position << endl; + killpg(pgid,SIGTERM); + } + else { + cout << "[" << pid << "]" << " didn't find\n"; + } + + auto endmain = std::chrono::high_resolution_clock::now(); + chrono::duration mainduration = endmain - startmain; + cout << mainduration.count() << endl; + return 0; +} diff --git a/lab2/src/part3_searcher.out b/lab2/src/part3_searcher.out new file mode 100755 index 0000000000000000000000000000000000000000..3a6314dfd3c6417c01004b36b08507445131b6e0 GIT binary patch literal 92656 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 literal 0 HcmV?d00001