嗨我正在寫一個字符驅動程序讀取和寫入特定的設備。由於我是一個noob,這是一個非常簡單和容易的char驅動器,它只使用最簡單的協議,例如打開,讀取,寫入和釋放。要測試我的驅動程序,我正在使用以下程序... 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。 – 2012-03-27 05:37:27
感謝您的幫助! – 2012-03-27 05:52:28