2012年4月23日 星期一
2011年12月13日 星期二
Linux kernel內讀寫檔案
在driver裡面,我們有時需要留一些資訊在磁碟上讓userspace作溝通,因此需要從kernel上直接寫入檔案。
相關API程式碼如下:
void InitKernelEnv(void){
oldfs = get_fs();
set_fs(KERNEL_DS);
}
void DinitKernelEnv(){
set_fs(oldfs);
}
struct file *OpenFile(char *path,int flag,int mode){
struct file *fp;
fp=filp_open(path, flag, 0);
if (fp) return fp;
else return NULL;
}
int WriteFile(struct file *fp,char *buf,int readlen) {
if (fp->f_op && fp->f_op->read)
return fp->f_op->write(fp,buf,readlen, &fp->f_pos);
else
return -1;
}
int ReadFile(struct file *fp,char *buf,int readlen)
{
if (fp->f_op && fp->f_op->read)
return fp->f_op->read(fp,buf,readlen, &fp->f_pos);
else
return -1;
}
int CloseFile(struct file *fp) {
filp_close(fp,NULL);
return 0;
}
而使用方法請參考下面這個範例:
void test(){
char read_buf[2048] = "";
char write_buf[2048] = "";
struct file *fp;
InitKernelEnv();
//read file
fp = OpenFile(WPS_STA_LIST_FILE, O_RDONLY | O_CREAT, 0);
if(fp != NULL){
ReadFile(fp, read_buf, sizeof(read_buf));
}
CloseFile(fp);
//write to file
fp = OpenFile(WPS_STA_LIST_FILE, O_CREAT | O_WRONLY, 0);
if (fp!= NULL) {
WriteFile(fp, write_buf, sizeof(write_buf));
}
CloseFile(fp);
DinitKernelEnv();
}
參考資料:
[1] 請問內核中讀寫配置文件的源碼在哪個目錄的哪個文件中
[2] Reading file in kernel-簡單但實用
Linux kernel內取得時間
在kernel裡面,沒有辦法使用time(0)取得時間,但是我們可以利用do_gettimeofday()方式將時間取出。
//預先引入標頭檔
#include <linux/time.h>
...
//取得時間
struct timeval tv1;
do_gettimeofday(&tv1);
經由tv內部的tv_sec就可以取得目前系統時間的秒數了。
參考資料:
[1] linux kernel时间
[2] 时间处理函数 | do_gettimeofday() -- 获取当前系统时间
2011年12月11日 星期日
2011年12月9日 星期五
Free
我的心終於自由了。
很感謝這次出國的機會,讓我見識到更多。我發現我的喜歡是很膚淺的。只要女生有打扮化妝,型又是我喜歡的那種,我就會有喜歡的感覺了。
因此,我已經放棄以前的想法了。
把該塵封的都封閉起來,該封鎖的都封鎖了,不想讓這份以前情感再流露出去。
最好的方式,就是完全不要看到,不要想到。
忽然有種海闊天空的感概。
2011年11月20日 星期日
忍住
到現在已經兩個禮拜了,說好不連絡的我,心情反而急轉直下。
我好想再跟妳聊聊天,問妳最近過得怎樣。聽聽妳的聲音,還有妳那因為遲疑而空白的無聲。
到頭來,被制約的反而是我自己。
到底怎樣做才比較好。
2011年11月7日 星期一
調適
我一直覺得心理上我還在學習如何自我調節。
為什麼跟妳沒有見面就會開始不安。
為什麼腦海中都填滿妳的點點滴滴。
為什麼好想再跟妳說說話。
為什麼想要再見到妳。
我以為我已經學會了,其實還是不堪一擊。
訂閱:
文章 (Atom)