Привет, я пишу драйвер чарта, который читает и пишет на определенное устройство.Так как я новичок, это очень простой и удобный символьный диск, который использует только самые простые протоколы, такие как open, read, write и release.Для проверки моего драйвера я использую следующую программу ... ниже приведен исходный код моей программы пользовательского пространства.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <arpa/inet.h>
#include <signal.h>
#include <poll.h>
int main(void){
int num;
char *buff;
FILE *fd = fopen("/dev/hi","a+");
num = fprintf(fd,"this is sentence 1 !!");
num = fprintf(fd,"this is sentence 2 !!");
num = fprintf(fd,"this is sentence 3 !!");
num = fprintf(fd,"this is sentence 4 !!");
num = fprintf(fd,"this is sentence 5 !!");
buff = malloc(sizeof(char) * num+1);
fread(buff,sizeof(char),num+1,fd);
printf("%s\n",buff);
fread(buff,sizeof(char),num+1,fd);
printf("%s\n",buff);
fread(buff,sizeof(char),num+1,fd);
printf("%s\n",buff);
fread(buff,sizeof(char),num+1,fd);
printf("%s\n",buff);
fread(buff,sizeof(char),num+1,fd);
printf("%s\n",buff);
free(buff);
close(fd);
return 0;
}
Теперь не важно, как работает мой драйвер, но в каком порядке я называю егочитать и писать методы.В идеале было бы неплохо, если бы драйвер был записан в том порядке, в котором я написал свой код, и прочитал в том порядке, в котором я написал свой код.Однако я заметил, что если я написал свой код, как ...
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <arpa/inet.h>
#include <signal.h>
#include <poll.h>
int main(void){
int num;
char *buff;
FILE *fd = fopen("/dev/hi","w");
num = fprintf(fd,"this is sentence 1 !!");
num = fprintf(fd,"this is sentence 2 !!");
num = fprintf(fd,"this is sentence 3 !!");
num = fprintf(fd,"this is sentence 4 !!");
num = fprintf(fd,"this is sentence 5 !!");
close(fd);
fd = fopen("/dev/hi","r");
buff = malloc(sizeof(char) * num+1);
fread(buff,sizeof(char),num+1,fd);
printf("%s\n",buff);
fread(buff,sizeof(char),num+1,fd);
printf("%s\n",buff);
fread(buff,sizeof(char),num+1,fd);
printf("%s\n",buff);
fread(buff,sizeof(char),num+1,fd);
printf("%s\n",buff);
fread(buff,sizeof(char),num+1,fd);
printf("%s\n",buff);
free(buff);
close(fd);
return 0;
}
Я заметил, что fprintf () пишет только когда я закрываю файловый дескриптор и, что еще хуже, запускается после того, как я читаю с моего устройства,Конечно, я хочу написать на свое устройство, а затем прочитать с него, но этого не происходит для этого.Это создает у меня впечатление, что многие вещи в пространстве пользователя выполняются одновременно, что сбивает меня с толку.Как узнать порядок вызова функций моего устройства при работе с пользовательским пространством?Извините, если это покажется расплывчатым, я подробно остановлюсь на чем угодно.
Спасибо за любые ответы !!