Привет, я пишу драйвер char, который читает и записывает на конкретное устройство. Поскольку я - noob, это очень простой и простой диск, который использует только самые простые протоколы, такие как открытие, чтение, запись и выпуск. Чтобы проверить мой драйвер, я использую следующую программу ... bellow - это источник для моей программы пользовательского пространства.В каком порядке выполняется код пространства пользователя?
#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() пишет только, когда я закрываю дескриптор файла и худшее еще, выполняется после того, как я прочитал с устройства. Конечно, я хочу писать на свое устройство, а затем читать, но этого не происходит. Это создает у меня впечатление, что многие вещи в пользовательском пространстве выполняются одновременно, что меня озадачивает. Как узнать, какой порядок функций моего устройства вызывается при работе с пользовательским пространством. Извините, если это кажется расплывчатым, я расскажу о чем-нибудь, что является мирским.
Спасибо за любые ответы !!
Я бы использовал системный вызов 'write', а не' fprintf' или 'fputs' из стандартной библиотеки. Или, по крайней мере, называть 'fflush' очень часто. –
Спасибо за помощь! –