Я написал приложение для чтения и записи в запись pro c, но получаю сообщение об ошибке «*** обнаружено разрушение стека ***: завершено Прервано (дамп ядра)»
Любая идея, почему эта ошибка. Примечание: если я попробую обычный файл (см. Код), то ошибок не будет.
vivek@Taru-PC:~/Practice_Code/code_driver$ ./app
Enter 1: To write data into device.
Enter 2: To read data from device.
Enter 8: To Display Menu again.
Enter 9: To Exit.
Enter your choice: 1
Enter data to write: hello world
Enter your choice: 2
Content of device: hello world
Enter your choice: 9
*** stack smashing detected ***: <unknown> terminated
Aborted (core dumped)
Также см. Код
#include<stdio.h>
#include<fcntl.h>
#include<unistd.h>
#include<string.h>
#define BUFF_SIZE 256
void display_menu(){
printf("Enter 1: To write data into device.\n");
printf("Enter 2: To read data from device.\n");
printf("Enter 8: To Display Menu again.\n");
printf("Enter 9: To Exit.\n");
}
int main(int argc, char *argv[]){
int fd, choice=0;
char buffer[BUFF_SIZE];
// fd = open("/home/vivek/test_file.txt", O_RDWR|O_CREAT);
// fd = open("/dev/my_char_dev", O_RDWR);
fd = open("/proc/my_proc", O_RDWR);
display_menu();
while(choice!=9){
printf("Enter your choice: ");
scanf("%d", &choice);
getchar(); //To read new line after the digit, without it, will face problem in fget.
switch(choice){
case 1: printf("Enter data to write: ");
fgets(buffer, BUFF_SIZE, stdin);
write(fd, buffer, strlen(buffer));
printf("\n");
break;
case 2: read(fd, buffer, BUFF_SIZE);
printf("Content of device: %s\n", buffer);
break;
case 8: display_menu();
break;
case 9:
break;
default: printf("Not supported.\n");
break;
}
}
close(fd);
return 0;
}
Если я попробую обычный файл (test_file.txt ), то ошибки нет.