Linux Driver(3) - 最基本的開關讀寫(3)vchar.h:#ifndef _VIRTUAL_CHAR_DEVICE_H_#define _VIRTUAL_CHAR_DEVICE_H_#include #ifndef VCHAR_MEM_SIZE#define VCHAR_MEM_SIZE 128#endif#ifndef VIRTUAL_CHAR_DEVICE_MAJOR#define VIRTUAL_CHAR_DEVICE_MAJOR 0   // dynamic major by default#endif#ifndef VIRTUAL_CHAR_DEVICE_NR_DEVS#define VIRTUAL_CHAR_DEVICE_NR_DEVS 1    // number of bare virtual devices#endif#ifdef VIRTUAL_CHAR_DEVICE_DEBUG    #ifdef __KERNEL__        #define TRACE(fmt, args...) printk( KERN_DEBUG "vchar: " fmt, ## args)    #else        #define TRACE(fmt, args...) fprintf(stderr, fmt, ## args)    #endif#else    #define TRACE(fmt, args...)#endifint vchar_open(struct inode *inode, struct file *filp);int vchar_release(struct inode *inode, struct file *filp);ssize_t vchar_read(struct file *filp, char __user *buf, size_t size,  loff_t *ppos);ssize_t vchar_write(struct file *filp, const char 酒店打工__user *buf,  size_t size, loff_t *ppos);#endif // _VIRTUAL_CHAR_DEVICE_H_vchar.c: #include <linux/module.h>#include <linux/types.h>#include <linux/fs.h>#include <linux/errno.h>#include <linux/mm.h>#include <linux/sched.h>#include <linux/init.h>#include <linux/cdev.h>#include <asm/io.h>#include <asm/system.h>#include <asm/uaccess.h>#include "ioctl.h"#define VIRTUAL_CHAR_DEVICE_DEBUG#include "vchar.h"int vchar_major = VIRTUAL_CHAR_DEVICE_MAJOR;int vchar_minor = 0;int vchar_nr_devs = VIRTUAL_CHAR_DEVICE_NR_DEVS;const char* vchar_name = "vchar";typedef struct _vchar_dev{    struct cdev cdev; // char device    unsigned char mem[VCHAR_MEM_SIZE];}vchar_dev;vchar_dev* vchar_devp;// file operation structconst struct file_operations vchar_fops ={  .owner = THIS_MODULE, // .llseek = vchar_llseek,  .read = vchar_read,  .write = vchar_write, // .ioctl = vchar_ioctl,  .open = vchar_open,  室內裝潢.release = vchar_release,};int vchar_open(struct inode *inode, struct file *filp){    filp->private_data = vchar_devp;    return 0;}int vchar_release(struct inode *inode, struct file *filp){    return 0;}ssize_t vchar_read(struct file *filp, char __user *buf,        size_t size, loff_t *ppos){    unsigned long offset =  *ppos;    unsigned int count = size; // count of data    int ret = 0;    vchar_dev *devp = filp->private_data;    // count the lenght of read correctly    if (offset >= VCHAR_MEM_SIZE)      return count ?  - ENXIO: 0;    if (count > VCHAR_MEM_SIZE - offset)      count = VCHAR_MEM_SIZE - offset;    // copy data to user-space    if (copy_to_user(buf, (void*)(devp->mem + offset), count))    {        ret =  買屋- EFAULT;    }    else    {        *ppos += count;        ret = count;        TRACE("read %d bytes(s) from %ld\n", count, offset);    }    return ret;}ssize_t vchar_write(struct file *filp, const char __user *buf,        size_t size, loff_t *ppos){    unsigned long offset =  *ppos;    unsigned int count = size; // count of data    int ret = 0;    vchar_dev *devp = filp->private_data;    // count the lenght of write correctly    if (offset >= VCHAR_MEM_SIZE)        return count ?  - ENXIO: 0;    if (count > VCHAR_MEM_SIZE - offset)        count = VCHAR_MEM_SIZE - offset;     // get the data from user-space     if 土地買賣(copy_from_user(devp->mem + offset, buf, count))     {        ret =  - EFAULT;     }     else     {        *ppos += count;        ret = count;        TRACE("written %d bytes(s) from %d\n", count, offset);     }     return ret;}// initiate and register cdevstatic void vchar_setup_cdev(vchar_dev* devp, int index){    int error, devno = MKDEV(vchar_major, index);    cdev_init(&devp->cdev, &vchar_fops);    devp->cdev.owner = THIS_MODULE;    devp->cdev.ops = &vchar_fops;    error = cdev_add(&devp->cdev, devno, vchar_nr_devs);    if (error)        TRACE("Error %d adding vchar%d\n", error, index);}int 房屋貸款vchar_init(void){    int result;    dev_t devno = 0; // device number    // asking for a device number, default is 0    if (vchar_major)    {          devno = MKDEV(vchar_major, vchar_minor);          result = register_chrdev_region(devno, vchar_nr_devs, vchar_name);    }    else // 0 is dynamic    {          result = alloc_chrdev_region(&devno, vchar_minor, vchar_nr_devs, vchar_name);          vchar_major = MAJOR(devno);    }    if (result < 0)        return result;    // allocate memory for devp    vchar_devp = kmalloc(sizeof(vchar_dev), GFP_KERNEL);    if (!vchar_devp)    {        // unregister device before return 西裝外套error        unregister_chrdev_region(devno, vchar_nr_devs);        return result = -ENOMEM;    }    memset(vchar_devp, 0, sizeof(vchar_dev));    vchar_setup_cdev(vchar_devp, 0);    TRACE("schar is loaded...\n");    return 0;}void vchar_exit(void){    cdev_del(&vchar_devp->cdev);   // delete char device    kfree(vchar_devp);     // free device memory    unregister_chrdev_region(MKDEV(vchar_major, vchar_minor), vchar_nr_devs); // free device number    TRACE("schar is unloaded...\n");}MODULE_AUTHOR("Hughes");MODULE_LICENSE("Dual BSD/GPL");module_init(vchar_init);module_exit(vchar_exit); 說明: vchar_init:依vchar_major的值來決定用動態的還是靜態的裝置編號,預設為0,這裡表示使用動態的方法申請。接著使用 kmalloc來分配憶體給 vchar_devp,vchar_devp為我們自定義的結構,內含節能燈具cdev結構。kmalloc類似malloc,用法差不多。 接著呼叫vchar_setup_cdev()來註冊字元裝置。vchar_exit:呼叫 cdev_del 摧毀 vchar_devp裡的cdev,釋放 vchar_devp的記憶體,最後再取消已註冊的字元裝置編號。vchar_setup_cdev: 使用cdev_init來初始化 cdev,並設定 file_operations給kernel,最後呼叫 cdev_add來將cdev加入kernel。vchar_open、vchar_release:在open時,用filp->private_data來儲存我們的vchar_devp。release在這裡並沒有做任何事。vchar_read、vchar_write: 我們有在vchar_devp結構裡宣告了一個大小為128的記憶體,用來放讀寫的資料。read、write很像,在這裡作的動作差不多,差別是一個是 copy資料到user-space,另一個是從 user-space得到資料。filp :在這裡是用來得到vchar_dev指標,也就是open時存的 filp->private_data。buf :是用來和user-space傳輸資料用的,我們不應該直接操作 buf(因為很多原因),應該用安全的函式,       在這裡我們使用copy_to_user和copy_from_user,使用上類似memcpy。size:這裡指的是要讀寫的資料大小ppos:這裡是偏移值的指標大概的流程就是檢查偏移值和要讀寫的資料大小後,再做讀寫的動作。main.c:#include <sys/types.h>#include 關鍵字排名<unistd.h>#include <sys/stat.h>#include <sys/ioctl.h>#include <stdio.h>#include <fcntl.h>#include <error.h>#define BUF_SIZE 130int main(void){    int fd;    ssize_t len=0;    const char* dev_name = "/dev/vchar";    unsigned char buf[BUF_SIZE] = {0};    fd = open(dev_name, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR);    if (fd)    {        memset(buf, 1, BUF_SIZE);        len = write(fd, buf, BUF_SIZE);        printf("write: %d bytes\n", len);        close(fd);    }    else    {        perror("test_vchar::write");    }    fd = open(dev_name, O_RDWR);    len = read(fd, buf, BUF_SIZE);    if (len > 0)    西裝{        printf("read: %d bytes\n", len);    }    else    {        perror("test_vchar::read");    }    len = read(fd, buf, BUF_SIZE);    if (len > 0)    {        printf("read: %d bytes\n", len);    }    else    {        perror("test_vchar::read");    }    close(fd);}說明:這隻程式是user-space的,即是輸入make app後,產生的test_vchar程式。主要就是測試讀寫的功能,這裡是測試讀寫大於128的資料。5. 使用方法1.產生所需的Makefile、vchar_load.sh、vchar_unload.sh、vchar.c、vchar.h、main.c。2.輸入make,產生並載入vchar module。3.輸入make app,產生test_vchar4.輸入./test_vchar,執行程式後看vchar的反應。5.要看vchar driver 輸出的訊息,請輸入 dmesg | tail。

wl84wllzyt 發表在 痞客邦 PIXNET 留言(0) 人氣()

牛乳.優酪乳真相二胎https://www.facebook.com/ARMANI#!/photo.php?fbid=1374371小型辦公室49715031&set=a.132355商務中心300223216.23919.100003462支票貼現406236&type=1
591

wl84wllzyt 發表在 痞客邦 PIXNET 留言(0) 人氣()

不舒服...晚上是幼教聯誼會的歲末聯歡晚會 在蘆找房子洲海霸王餐廳吃尾牙 每一年都是如此 覺得菜色沒婚禮顧問什麼變化 奇怪的是每次我吃沒幾道菜 胃就感覺禮服不舒服回家就吐了 不知道是不是消化不良 吐完租屋網吃個胃乳片才好一點兒真是糟糕的胃 不舒服的時找房子候才會體會身體健康的重要健康真的很重要哦! 設計裝潢因為病痛要自己承受 無人可以代替 希望我的朋友租房子 大家都健健康康哦!

wl84wllzyt 發表在 痞客邦 PIXNET 留言(0) 人氣()

少女時代允兒現身張根碩演唱會為其加油轉張根碩台灣首站2012-07-09 韓網新聞 - 少女時代允兒現身張根碩演唱會為其加油7月7日晚7點,少女時代成員允兒突然現身吳哥窟首爾高麗大學華亭體育館召開的“2012張根碩亞洲巡演THE CRI SHOW 2”的現場。允兒當日和自己的經紀人等來到演唱會現場,坐在觀眾席觀看張根碩的演唱會。演唱會九份民宿一結束,允兒就來到待機時,看望很久沒有見面的張根碩。允兒和張根碩通過KBS 2TV播出的韓劇《愛情雨》而結緣。另外,張根碩在當日的演唱會之前召開了記者招待膠原蛋白會,表示“我喜歡到新的地方挑戰新事物,不喜歡安于某個地方滿足現狀”,“我正在準備今年年末的歐洲clubing tour”。張根碩所說的“歐洲clubing tour” 是DJ買屋網電子音樂等舞曲,在容納1,500名左右的小規模club內進行,并輾轉多個城市進行表演。張根碩的這個計劃是想通過音樂在語言不通的外國宣傳自己,從而與當地的人們小額信貸變得更加親切。張根碩說“秋天結束CRI SHOW 2以后,就計劃進行歐洲clubing tour,走訪各個國家,喝酒玩樂的同時做DJ。至于女朋友這方面,因為沒有交往過,也沒澎湖民宿跟女生一起玩過,所以不太清楚。” ,結果聽到粉絲們淘氣的“eiyi”(表示不相信張根碩沒有交過女朋友)聲。大概本人自己說完也覺得好笑,哈哈大笑著說“真的是住商房屋無法想象的小規模,但是會走訪歐洲、美國夏威夷,以及大洋洲的各地,你們會在很多地方看到我”引發在場眾人的一片爆笑。同時,張根碩表示“自己起了亞洲王子的買屋外號,甚至連推特的名字也改成亞洲王子,但是不管是有意無意的,我已經在韓國、中國、日本、以及泰國地區,開始在張根碩的名字前面加上亞洲王子了,說明我的夢澎湖民宿想已經實現了”。cr 中文網_jinwan 譯

wl84wllzyt 發表在 痞客邦 PIXNET 留言(0) 人氣()

建構產銷資訊平台才能解決菜價下跌問題 (台灣時報 社論 2007.12.28)建構產銷資訊平台才能解決菜價下跌問題 只不過在兩個多月前,民眾都在為狂漲到每公斤百元以上的菜價叫苦連天,這兩天的菜價竟然已經在產地狂跌到每公斤四元以下;農民怨聲載道之下,只能將青菜剷平變成肥料,令人觸目驚心。我們要求政府要真正重視這個問題,以有效的方案有巢氏房屋徹底解決問題,不要年復一年地讓農民煎熬在這種輪迴之中! 農業生產有一個著名的價格現象,叫做「蛛網理論」。由於農產品的生產和工業產品不同,需要一段時間才能完成生產之下,當期農產品價格只能影響到下一期的農品生產。因此,如果當期的價格偏高,就會引導下一期的生產大量增加。而在農產品不耐久藏之下,就造成了下一期的農產品價格個人信貸大跌。大跌的農品價格又讓下下期的生產量大減,再度造成價格的大幅上揚,開始了另一個價格的輪迴。這種價格隨著產量波動而一上一下的現象,劃在經濟學的供給和需求圖形上,有如一個蜘蛛網一般,因而被稱為「蛛網理論」。但是,對於農民來說,一種一上一下的價格波動狀態,其實讓農民難以規劃生產,在價格飆漲的時期沒有更多的生產可以掌握「佳開幕活動期」,在價格慘跌的時候又無能逃避,只能成為這種輪迴的俘虜和社會的弱勢族群,心裡的辛酸和不平,豈是一般白領階級所能體會萬分之一二者! 然而,令人納悶的是,現在已經是一個「資訊社會」,也就是發出和獲得各種資訊的能力已經大大地超越了過去。在這種社會之中,要讓農民瞭解各種農產品種植的狀況,是否會超過市場的需求,乃至於造成景觀設計價格的崩跌,大體上應該是不成問題才對。只要每一家農戶在耕種之後向農會登記一下,農會匯總之後立刻以電腦向農政單位會報,政府應該能夠隨時掌握各種蔬菜或農產的供給狀況。如果有農產品可能產生「供過於求」的狀況,立刻透過「電子郵件」發出預警、通知農戶,不要繼續種植某種農產。如此一來,應該可以精密地調節產量才是。即使真的超種,也好房網可以早日謀求解決之道,不必等到農民「哭聲震天」,才來進行危機處理。也許政府只要協助每一家農戶擁有電腦和網路,確保農民或子女有人能夠使用電腦,來接收農政單位的通知或自行上網參閱「警訊」。這看起來並不是什麼了不起的「重大計畫」,但詭異的是,從舊政府到「新政府」,卻都沒有能夠推動實施,放任「菜土菜金」的現象周而復始地年年上室內裝潢演,令人感到難以置信! 最令人難過的是,台灣並不是一個資訊科技落後的國家。台灣生產的電腦,全世界都在用。「世界經濟論壇」評估二○○五-二○○六年的「網路整備率」中,台灣在全球一一五國中名列第七,在亞洲僅次於新加坡,顯著超越香港和韓國。另外,我國「政府資訊應用度」也被該論壇評估為世界第四,甚至「政府網路服務」還被美國關鍵字行銷布朗大學在不同年度評比為世界第一和第二。面對這種高度優異的資訊設備和高度脫節的產銷狀況,沒有人能相信政府已經盡了為農民和農業疏通產銷關節、穩定農產物價的責任! 當然,實際的狀況可能要複雜一些,因為在通路的環結上還有各種「中間商剝削」的問題,甚至部分農會已經淪為地方惡勢力勾結牟利的場所。然而,如果農民本身都能夠上網591獲得通路資訊,甚至建立獨立的銷售網頁,當起通路商進行宅配的話,那些想要剝削農民的中間商根本就無能為力。只是,要農民家家戶戶都能使用電腦、網路、建立網頁,的確是需要一些投資和人力訓練,這就是一個政府有沒有效能的最佳考驗了。迄今為止,我們看不出政府有何計畫要突破這種困境;同樣的,我們也看不出在野黨的候選人將它當一回事。朝租屋網野天天爭執著「一階段」或「兩階段」投票才對,卻沒有人去關心農民如何擺脫這種困局,實在令人不解和遺憾! 奉勸兩大黨,再怎麼口水戰,至少也要為了農民的選票,提出有效的辦法,徹底解決「菜土菜金」的問題吧!

wl84wllzyt 發表在 痞客邦 PIXNET 留言(0) 人氣()

團體旅遊、團體機票、便宜機票 喬安旅行社提供國內外眾多組合任您挑選,專精國內外團體旅遊機票行程事宜,並提供團體旅遊諮詢團體旅遊服務、團體旅遊行程估價、團體獎勵旅遊、團體機票促銷方案、團體機票找房子價格,團體機票訂購須知…等服務。專業的團體機票商務之旅,香港澳門大陸熱門團體湊票,可自由挑選多樣行程或由專業人員針對您的需求精心搭配,優質旅遊品質認證。 旅行社項目 高雄旅行社 >團體旅遊 室內設計高雄旅行社 >大陸旅遊 高雄旅行社 >東南亞旅遊 高雄旅行社 >團體機票 高雄旅行社 >蜜月旅行 高雄旅行社 >大陸入台 高雄旅行社 >自由行 高雄旅行社 >便宜機票 團體及員工旅遊專區 團體及員烤肉食材工旅遊 >團體旅遊估價 團體及員工旅遊 >國內訂房 團體及員工旅遊 >企業專區 團體及員工旅遊 >同業專區 團體及員工旅遊 >合作夥伴 團體及員工旅遊 >精華答客問 自由行專區 自由行>精選自由行 自由行濾桶>團體自由行>東京 自由行>團體自由行>關島 自由行>精選自由行>上海 自由行>精選自由行 自由行>團體自由行>峇里島 自由行>精選自由行>珠海 自由行>團體自由行>大阪 自由行>團體自由行>新加建築設計坡 自由行>精選自由行>澳門 自由行>團體自由行>澳門 自由行>團體自由行>上海 自由行>精選自由行>香港 自由行>團體自由行>濟州 自由行>團體自由行>帛琉 自由行>航空自由行 自由行>團體自由行商務中心>首爾 自由行>團體自由行>北京 自由行>團體自由行>香港 大陸旅遊專區 大陸旅遊 >華北 大陸旅遊 >西南 大陸旅遊 >華東 大陸旅遊 >華中華南 大陸旅遊 >西北 東南/北亞旅遊專區 東南亞旅遊 土地買賣東南亞旅遊 >峇里島 東北亞旅遊 >韓國 東南亞旅遊 >泰國 東南亞旅遊 >柬埔寨 東北亞旅遊 >日本 東南亞旅遊 >越南 東南亞旅遊 >新加坡 蜜月旅行專區 歐美紐澳南亞 蜜月旅行 >紐西蘭 蜜月旅行 >賣房子加拿大 蜜月旅行 >美國 蜜月旅行 >澳洲 蜜月旅行 >歐美紐澳 浪漫歐洲 蜜月旅行 >法國  蜜月旅行 >西班牙 蜜月旅行 >西德 蜜月旅行 >英國 蜜月旅行 >匈牙利 蜜月旅行 >丹麥 蜜月旅行 >奧地買房子利 蜜月旅行 >捷克 蜜月旅行 >比利時 蜜月旅行 >希臘 蜜月旅行 >芬蘭



wl84wllzyt 發表在 痞客邦 PIXNET 留言(0) 人氣()

堂本家日式泡芙~泡芙小店面 月營業高達百萬街頭上出現大排長龍的隊伍,消費者願意花上十幾、二十房屋貸款分鐘等候的主角,居然是這小小的泡芙。老闆許謦安從日本學回來的泡芙,為了讓台灣消費者更能接受土地買賣,他也研發出獨門秘方,黃澄澄的的泡芙,一出爐就帶來濃濃的香味,也幫他們招來不少顧客。雖然店辦公室出租面只有三、五坪,不過一個月營業額卻高達將近百萬。走出餅乾代工 再展事業第二春 做了二十多年糕土地買賣餅代工生意的許謦安,偶然機會中,在日本街頭看到紅透半邊天的泡芙,拜師學藝下,他把泡芙「飄洋賣屋過海」帶回台灣。走出代工框架的許謦安,和創業伙伴相互扶持下,短短一年內,連開了七家直營店,商務中心也讓他在中年之後,再度開創事業的第二春!<堂本家日式泡芙>許謦安電話:02-2370-0588#125地房屋貸款址:台北市漢中街116號(誠品116廣場1樓) 商務中心http://www.ttv.com.tw/HomeV2/news/deep/deep.asp?MGID=A4&PMID=164&PEBID=716&MGName=發現新台買屋幣&EyeBrowTitle=發現新台 

wl84wllzyt 發表在 痞客邦 PIXNET 留言(0) 人氣()