technocrat_ajeet

New Member
Joined
Dec 2, 2019
Messages
2
Reaction score
0
Credits
0
I am trying to make linux kernel module to read two files and match data between them. I am unable to do so because of syntax as well as header library problems.
Can you please provide me a code which can help me to complete this task ASAP.
 


I am using Ubuntu.

I have tried to code but am getting lot of errors.



#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/fs.h>
//#include <linux/stdio.h>
//#include <stdlib.h>
//#include<linux/cdev.h>
//#include <linux/uaccess.h>
//#include <stdio.h>
//#include <linux/proc_fs.h>

//Maximum size of the array
#define MAX_SIZE 200
typedef struct
{
int pos;
int line;
} sMismatchingPos;
ssize_t proc_read(const FILE *fp1, const FILE *fp2,sMismatchingPos *psMismatchPos)
{
// pos and line to track of position of mismatch
int pos = 0, line = 1;
int ch1 =0, ch2 = 0;
int isContentMatch = 0;
// iterate loop until EOF
do
{
//fetch character of both file
ch1 = fgetc(fp1);
ch2 = fgetc(fp2);
++pos;
// if both variable encounters new
// line then line variable is incremented
// and pos variable is set to 0
if ((ch1 == '\n') && (ch2 == '\n'))
{
++line;
pos = 0;
}
//update structure variable
psMismatchPos->pos = pos;
psMismatchPos->line = line;
// if fetched data is not equal then
// set the mismatched flag
if(ch1!= ch2)
{
isContentMatch =1;
break;
}
}
while (ch1 != eof && ch2 != eof);
//return flag status
return isContentMatch;
}

int init_close_module()
{
printk(" Kernel Panic \n");
return 0;
}



int init_module()
{
//file pointers
FILE *fp1 = NULL;
FILE *fp2 = NULL;
//structure variable
sMismatchingPos misMatchPos = {0};
int isContentMatch = 0;
// opening both file in read only mode
fp1 = fopen("aticleworld1.txt", "r");
fp2 = fopen("aticleworld2.txt", "r");
//checking file open or not
if (fp1 == NULL || fp2 == NULL)
{
printk("Error : Files not open");
exit(1);
}
//if 1, then file mismatch
isContentMatch = proc_read(fp1, fp2,&misMatchPos);
if(isContentMatch)
{


{
init_close_module();
}

printk("Both files are different\n");

//print line and pos where both file mismatch
// printf("Line Number : %d \n",misMatchPos.line);
// printf("Position : %d \n",misMatchPos.pos);
}
else
{
printk("Both files are same\n");
}
// closing both file
fclose(fp1);
fclose(fp2);
return 0;
}




In the above code,
I am getting problems in header files.

Errors which I am getting is :
1- Unknown type name FILE
2- implicit declaration of function ‘fgetc’ [-Werror=implicit-function-declaration]
ch1 = fgetc(fp1);
3- ‘eof’ undeclared (first use in this function)
while (ch1 != eof && ch2 != eof);

4- implicit declaration of function ‘fopen’ [-Werror=implicit-function-declaration]
fp1 = fopen("aticleworld1.txt", "r");

5- assignment makes pointer from integer without a cast [enabled by default]
fp1 = fopen("aticleworld1.txt", "r");

6- implicit declaration of function ‘exit’ [-Werror=implicit-function-declaration]
exit(1);
 

Members online


Top