Question: Rewrite the following program by implementing signal handlers and implementing a timer #include #include #include #include #include #include #include #include #include // This is a
Rewrite the following program by implementing signal handlers and implementing a timer
#include
#include
#include
#include
#include
#include
#include
#include
#include
// This is a structure class that is used to read data from
// the file where character as letter and short integer as the the number
struct pairs
{
char letter;
short int number;
};
// Function to count the number of set bits in a binary representation
int count_set_bits(int num1)
{
int count = 0;
while (num1)
{
count += num1 & 1; // Doing bit-wise comparision with the AND (&) Operator and the number 1
num1 >>= 1; // The binary bit shifts to the right by one digit
}
return count;
}
// This is the main program that reads the data file
int main()
{
char c;
int num;
FILE *file1; // This is where the FILE *file pointer is used to access the file
struct pairs char_int; // We are declaring char_int as the structure
file1 = fopen("error.dat", "rb"); // The file image.dat is being opened and assigned the
// pointer to File 1
if(!file1) // This is a if-condition loop to check if error occurs while opening file
{
printf("File cannot be opened or found ");
return 1;
}
// Read a character-integer pair every second
while (fread(&char_int, sizeof(struct pairs), 1, file1)) // This loop continues until the end of a file or when an error occurs
// It reads all the data from the file and moves the values to the
// structure char_int
{
// Compute the parity of the pair
c = char_int.letter;
num = char_int.number;
int parity = count_set_bits(c) + count_set_bits(num); // Adding counting number of bits set to 1 in both char and integer
if (parity % 2 == 0) // Checking if parity is even using % operator
{
// If parity is even, the data is valid
int original_num = num;
//printf(" step 3 num (%d)",num);
printf("(%c, %d) ",c ,original_num); // This will give the original value of the character and pr
for (int i = 0; i < char_int.number; i++) // This loop is used to display the decoded form of the pairing of character and integer
// by printing the character so many times until it reaches the value of the integer
// It will start from 0 and continues until i is less than integer
{
printf("%c", char_int.letter); // This print function is used to print the character
// retrieved from the file
}
printf(" "); // Each record is printed on a new line
}
else
{
// The parity is odd, so the data is corrupted
printf("Error: Odd parity ");
}
sleep(1); // This uses a sleep system call for the specified number of seconds until interrupted
// Reading 1 character integer pair every second here 1 corresponds to every second
}
fclose(file1); // Closing the file after successfully reading the data
return 0;
}
Step by Step Solution
There are 3 Steps involved in it
Get step-by-step solutions from verified subject matter experts
