Linux 之檔案編程(一)

Linux中檔案編程的基本知識以前看一個朋友的部落格,其中有一句話很犀利:“Linux 下皆檔案”,短短五個字就說出了檔案系統在Linux下的重要性。在Linux作業系統中,它對一切資源的管理歸根到底最後都是對檔案的操作。一.前言:在原理課上,我們就知道作業系統的五大供能之一就是對檔案的管理.那麼為什麼要引入檔案管理的功能呢,它的主要任務是什麼呢?我們先看看它出現的背景吧在現代作業系統中,要利用大量的程式和資料,由於記憶體容量有限,且不能長期儲存,於是人們想出了把這些資料以檔案的形式放在外存中,

《Linux那些事兒之我是USB》我是隨身碟(24)彼岸花的傳說(三)

前面已經說了,回到usb_stor_acquire_resources()函數中,返回了0。於是咱們終於回到了storage_probe()函數中來。1008行,scsi_add_host()函數被執行,之前申請的us->host被作為參數傳遞給它,同時,intf->dev也被傳遞給它,這個東西是被用來註冊sysfs的。前面已經說過,在scsi_host_alloc之後,必須執行scsi_add_host(),這樣,SCSI核心層才能夠知道有這麼一個host存在。scsi_add_h

《Linux那些事兒之我是USB》我是隨身碟(20)通往春天的管道

1991年,一個在Linux中引入了管道這個概念,並且把管道用在很多地方,如檔案系統、裝置驅動中。於是後來我們看到在Linux中有了各種各樣的管道。但是相同的是,所有管道都是用來傳輸東西的,只不過有些管道傳輸的是實實在在的物質,而有些管道傳輸的是資料。眼下我們在USB代碼中看到的管道就是用來傳輸資料及通訊。通訊是雙方的,不可能自言自語。而在USB的通訊中,一方肯定是主機,另一方是什嗎?是裝置嗎?說得更確切一點,真正和主機進行通訊的是裝置內的端點。關於端點,我們也可以專業一點說,從硬體上來看它是實

《Linux那些事兒之我是USB》我是隨身碟(25)彼岸花的傳說(四)

我們剛剛跟著storage_probe()幾乎完整地走了一遍,貌似一切都該結束了,可是你不覺得你到目前為止還根本沒有看明白裝置究竟怎麼工作的嗎?隨身碟,不僅僅是USB裝置,還是“盤”,它還需遵守USB Mass Storage協議,以及Transparent

arm-linux-eabi 和arm-none-eabi的區別

 編譯器arm-linux-eabi 和arm-none-eabi arm-linux-eabi 用於編譯 armlinux 代碼arm-none-eabi 不指名作業系統,可以是linux, 也可以是vxworks等,arm-none-eabi 不包含 __linux__ 等特定宏,所以往往編譯linux 核心的時候通不過。 編譯器arm-linux-eabi 和arm-none-eabi arm-linux-eabi 用於編譯 armlinux 代碼arm-none-eabi

《Linux那些事兒之我是USB》我是隨身碟(22)彼岸花的傳說(一)

彼岸花,花語是悲傷的回憶。很久很久以前,城市的邊緣開滿了大片大片的曼珠沙華,它的花香有一種魔力,可以讓人想起自己前世的事情。守護曼珠沙華的是兩個妖精,一個是花妖叫曼珠,一個是葉妖叫沙華。他們守候了幾千年,可是從來沒有見過面,因為開花時,就沒有葉子,有葉子時沒有花。他們瘋狂地想念著彼此,並被這種痛苦折磨著。終於有一天,他們決定違背神的規定偷偷地見一次面。那一年的曼珠沙華紅豔豔的花被惹眼的綠色襯托著,開得格外妖冶美麗。曼珠和沙華受到懲罰,被打入輪迴,並被詛咒永遠也不能在一起,生生世世在人世間受到磨難

《Linux那些事兒之我是USB》我是隨身碟(23)彼岸花的傳說(二)

如果讓大家投票的話,usb_stor_control_thread()這個函數中的代碼無疑是整個模組中最為精華的代碼。我們只需要它中間306行的for(;;)就知道,這是一個死迴圈,即使別的代碼都執行完了,即使別的函數都退出了,這個函數也仍然像永不消逝的電波一般,經典常駐。顯然,只有死迴圈才能代表永恒,才能代表忠誠。這是每一個守護者的職責。usb_stor_control_thread(),其代碼如下:299 static int usb_stor_control_thread(void *__

Linux進程學習一

Linux進程的基本知識和實現最近一周學習了Linux  進程編程的知識,現對其總結如下。在第一部分中我們先對進程的基本概念以及在Linux 中是如何來現實進程的進行介紹Tiger-John說明:許多人在學習中只注重如何編程,卻忘了注重原理,不去深究其基本原理。其實作業系統的原理就好

《Linux那些事兒之我是USB》我是隨身碟(33)迷霧重重的批量傳輸(二)

其實故事已經講了很久,但如果你覺得到這裡你已經把故事都看明白了,那麼你錯了。不僅僅是錯了。不信,我們就繼續看,先看512行,us->transport(),這個函數指標同樣是在storage_probe時被賦值,對於隨身碟,它遵守的是Bulk-Only協議,因此us->transport()被賦值為usb_stor_Bulk_transport()。來看usb_stor_Bulk_transport(),它同樣來自drivers/usb/storage/transport.c:941

《Linux那些事兒之我是USB》我是隨身碟(37)迷霧重重的批量傳輸(六)

usb_stor_bulk_transfer_sglist()函數有一定的“蠱惑性”,我們前面說過,之所以採用sglist,就是為了提高傳輸效率。我們更知道,sg的目的就是讓一堆不連續的buffers在一次DMA操作都傳輸出去。其實在USB的故事中,事情並非如此。不過如果你對USB

《Linux那些事兒之我是USB》我是隨身碟(29)彼岸花的傳說(八)

對於use_sg為0的情況,我們接下來再看168行,offset是函數調用傳遞進來的參數,注釋裡說得很清楚,就是用來標誌位移量的,每次複製幾個位元組它就增加幾個位元組,最大它也不能超過request_bufflen,這是顯然的。usb_stor_access_xfer_buf()這個函數所做的事情就是從srb->request_buffer往buffer裡邊複製資料,或者反過來從buffer往srb->request_buffer,然後返回複製了多少個位元組。對於offset大於等於

《Linux那些事兒之我是USB》我是隨身碟(26)彼岸花的傳說(五)

下面講一下usb_stor_control_thread()函數。喚醒它的是來自queuecommand的up(&(us->sema)),us->srb被賦值為srb,而srb是來自SCSI核心層在調用queuecommand時候傳遞進來的參數。聚焦usb_stor_control_thread()。314行,前面說過,關於dev_mutex這把鎖我們必須在看完整個模組之後再來從較高的角度來看。312行,如果設了US_FLIDX_DISCONNECTING,這個不用多說了,是

《Linux那些事兒之我是USB》我是隨身碟(27)彼岸花的傳說(六)

我們繼續接著上一節往下看。fill_inquiry_response(),這個函數來自drivers/usb/storage/usb.c中。266 void fill_inquiry_response(struct us_data *us,unsigned char *data,267                unsigned int data_len)268 {269   if (data_len<36) // You lose.270        return;271272  

《Linux那些事兒之我是USB》我是隨身碟(35)迷霧重重的批量傳輸(四)

有時候我也被這個問題所困擾,我不知道是我不明白,還是這世界變化太快。連Linux中都引入了到期這麼一個概念。設定一個時間,如果時間到了該做的事情還沒有做完,那麼某些事情就會發生。比如需要烤蛋糕,現在是8點30,而我們要烤45分鐘,所以希望鬧鐘9點一刻響,當時間到了,鬧鐘就如期待的一樣,響個不停。在電腦中,也需要做這樣的事情,有些事情,需要時間控制,特別是網路、通訊等,凡是涉及資料轉送,就得考慮逾時,換句話說,就是要定一個鬧鐘,你要是在這個給定的時間裡還沒做好你該做的事情,那麼停下來,別做了,肯定

《Linux那些事兒之我是USB》我是隨身碟(31)SCSI命令之我型我秀

usb_stor_control_thread()基本講完了,但是其中下面這幾行,正是高潮中的高潮。所謂的批量傳輸,所謂的Bulk-Only協議。正是在這裡體現出來的。371           /* we've got a command, let's do it! */372           else {373               US_DEBUG(usb_stor_show_command(us->srb));374               us->proto_

《Linux那些事兒之我是USB》我是隨身碟(28)彼岸花的傳說(七)

很顯然,我們是把為INQUIRY命令準備的資料儲存到了我們自己定義的一個結構體中,即structdata_ptr[36],但是我們是為了回應一個SCSI命令,最終需要知道答案的是SCSI核心層。正是它們傳遞了一個scsi_cmnd結構體下來,即srb。struct scsi_cmnd中有兩個成員,即unsigned request_bufflen和void *request_buffer,應該把data數組中的資料傳送到request_buffer中去,這樣,SCSI核心層就知道去哪裡擷取結果。

《Linux那些事兒之我是USB》我是隨身碟(36)迷霧重重的批量傳輸(五)

在講資料轉送階段之前,先解決剛才的曆史遺留問題。usb_stor_bulk_transfer_buf()中,406行,有一個很有趣的函數interpret_urb_result()被調用。這個函數同樣來自drivers/usb/storage/transport.c中:265 static int interpret_urb_result(struct us_data*us, unsigned int pipe,266                unsigned int length,

linux 下各種解壓縮命令

大致總結了一下linux下各種格式的壓縮包的壓縮、解壓方法。但是部分方法我沒有用到,也就不全,希望大家幫我補充,我將隨時修改完善,謝謝!整理:會遊泳的魚來自:www.LinuxByte.net最後更新時間:2005-2-20.tar解包:tar xvf FileName.tar打包:tar cvf FileName.tar DirName(註:tar是打包,不是壓縮!)———————————————.gz解壓1:gunzip FileName.gz解壓2:gzip -d

Linux Samba伺服器配置練習

環境RedHat Linux 9 + VWWare 8.0 + SSH

《Linux那些事兒之我是USB》第二版 前言

從開始寫Linux那些事兒系列文字開始,到如今已有四年多了,而從整理出版第一版到現在也已經一載有餘了。期間不斷有認識或不認識的朋友問我,怎麼會想起寫這麼多如此可愛的文字,我的回答都是:娛樂自己,娛樂大家而已!或許,大家早已經預設技術本是一個沉重或者說枯燥的話題,我們無法用一種娛樂的心態去看待它,甚至說很多人早已喪失了從中擷取樂趣的能力。但是,一切本不該如此的,對於不管什麼原因踏入這個行業的我們,願意或不願意,技術都已經是我們生命不可分割的一部分。既如此,又何不放輕鬆些,把他當成朋友,用我們自己的

總頁數: 3662 1 .... 858 859 860 861 862 .... 3662 Go to: 前往

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.