linux下錯誤的捕獲:errno和strerror的使用

linux下錯誤的捕獲:errno和strerror的使用經常在調用linux 系統api 的時候會出現一些錯誤,比方說使用open() write() creat()之類的函數有些時候會返回-1,也就是調用失敗,這個時候往往需要知道失敗的原因。這個時候使用errno這個全域變數就相當有用了。    在程式碼中包含 #include<errno.h>,然後每次程式調用失敗的時候,系統會自動用用錯誤碼填充errno這個全域變數,這樣你只需要讀errno這個全域變數就可以獲得失敗原因了。

Linux核心學習之中斷(1)

Linux核心學習之中斷[中斷概述]中斷本質上是一種特殊的電訊號,由硬體裝置發向處理器。異常和中斷的不同是異常在產生時必須考慮與處理器時鐘同步。實際上異常也常常稱為同步中斷。比如在除0或者缺頁時,必須靠核心處理的時候,處理器就會產生一個異常。 [中斷處理機制的實現]                                                       

Linux核心學習之中斷(2)-工作隊列

工作隊列[概述]工作隊列是一種將工作推後執行的的形式,工作隊列可以把工作推後,交由一個核心線程去執行,佔有進程內容相關的所有優勢,允許重新調度和睡眠。 [工作隊列的實現]工作隊列子系統是一個用於建立核心線程的介面,通過它建立的進程負責執行由核心其他部分排到隊列裡的任務。它建立的這些核心線程稱作工作者線程(worker thread)。工作隊列子系統提供了一個預設的工作者線程來處理推後的工作,所以我們大多數情況下,沒必要自己去建立工作者線程,使用預設的就OK。Linux kernel

《Linux那些事兒之我是USB》我是隨身碟(19)冬天來了,春天還會遠嗎?(五)

看完了get_transport()繼續看get_protocol()函數和get_pipes()函數。仍然是來自drivers/usb/storage/usb.c中:672 static int get_protocol(struct us_data *us)673 {674   switch (us->subclass) {675    caseUS_SC_RBC:676        us->protocol_name = "Reduced Block Commands

Linux 之檔案編程(一)

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

Linux核心學習之中斷(3)-tasklet

Tasklet[概述]Tasklet是非強制中斷的特殊實現。Tasklet通常是下半部處理的優選機制,它在效能和易用性之間有著很好的平衡。較softirq,tasklet不需要考慮SMP下的並發問題,而又比workqueue有著更好的效能。不同類型的tasklet可以在不同的處理器上同時執行,但同類型的tasklet不能同時執行。這就避免了並發問題。ksoftirqd核心線程有著類似工作者線程一樣的職責,它會周期的遍曆非強制中斷的向量列表,如果發現哪個非強制中斷向量掛起了(pending),就執

Linux進程學習二

fork()和vfork()的學習通過上一部分的學習,我們瞭解了進程的概念以及在Linux中進程的實現,此部分我們將具體學習如何在Linux中建立一個進程。一前言:通過原理知識的學習,我們知道每個進程由進程ID號標識。進程被建立時系統會為其分配一個唯一的進程ID號。當一個進程向其父進程(建立該進程的進程)傳遞其終止訊息時,意味這個進程的整個生命週期結束。此時,該進程佔用的所用資源套件括進程ID被全部釋放。那麼在Linux中如何建立一個進程呢?建立進程有兩種方式:一是由作業系統建立,二是由父進程建

Linux檔案夾和檔案許可權

 drwxr-x--- 46 jibo jibo 4096 2012-05-31 17:57 _src分別對應的是:檔案屬性串連數檔案擁有者所屬群組檔案大小檔案修改時間檔案名稱這裡r是可讀,w可寫,x 可執行,其中檔案屬性分為四段,---- --- --- 10個位置例如:  d   rwx   r-x  r-x

ARM Linux靜態映射分析

ARM Linux靜態映射分析源地址:http://www.embedu.org/Column/Column225.htm在華清遠見上課過程中,發現靜態映射方面初學者比較難於掌握和理解,下面分析一下靜態映射機制的原理並通過GPIO和USB、LCD等的靜態映射作為例子來說明如何通過這種靜態映射的方式訪問外設資源。核心提供了一個重要的結構體struct machine_desc

《Linux那些事兒之我是USB》我是隨身碟(21)傳說中的URB

有人問,怎麼寫一個驅動寫這麼久啊?的確,一路走來,大家都不容易,但既然已經走到今天,我們能做的也只有是堅持下去。usb_stor_acquire_resources(),從名字上來看是擷取資源。什麼是資源?之前不是申請了一大堆記憶體了嗎?寫個USB裝置驅動程式怎麼這麼麻煩啊?不是專門為USB Mass Storage裝置準備了一個struct

《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核心模組符號匯出後無法調用問題

Linux核心模組符號匯出後無法調用問題Linux模組間通訊方法非常的多,最便捷的方法莫過於函數符號匯出,然後直接調用。然而在linux2.6.26以後的核心中模組的符號匯出經常會出現問題,一個模組中的匯出符號不能被另外一個模組進行調用。這個使得處理有依賴關係的模組非常的頭疼。1. 符號匯出函數EXPORT_SYMBOL() EXPORT_SYMBOL標籤內定義的函數對全部核心代碼公開,不用修改核心代碼就可以在您的核心模組中直接調用。EXPORT_SYMBOL_GPL()

《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核心學習之同步

Linux核心學習之同步[臨界區和競爭條件]所謂臨界區就是訪問和操作共用資料的程式碼片段。多個執行線程並發訪問同一個資源通常是不安全的,為了避免在臨界區中並發訪問,coder必須保證這些代碼原子執行。如果兩個執行線程有可能處於同一個臨界區中同時執行,那麼這就是程式包含的一個bug。如果這種情況確實發生了,我們就稱它是競爭條件(race

《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》我是隨身碟(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,這個不用多說了,是

總頁數: 3662 1 .... 757 758 759 760 761 .... 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.