尾端與位段

端模式(Endian)的這個詞出自Jonathan Swift書寫的《格列佛遊記》。這本書根據將雞蛋敲開的方法不同將所有的人分為兩類,從圓頭開始將雞蛋敲開的人被歸為Big Endian,從尖頭開始將雞蛋敲開的人被歸為Littile Endian。小人國的內戰就源於吃雞蛋時是究竟從大頭(Big-Endian)敲開還是從小頭(Little-Endian)敲開。在電腦業Big Endian和Little

使用errno檢測錯誤

很多庫函數,特別是那些與作業系統有關的,當執行失敗時會通過一個名稱為errno的外部變數,通知程式該函數調用失敗。如: /*  調用庫函數  */if(errno)/* 處理錯誤 */ 上面看似清楚明了的代碼,其實是錯誤的,出錯原因在於,在庫函數沒有失敗的情況下,並沒有強制要求庫函數一定要設定errno為0,這樣errno的值可能是前一個執行失敗的庫函數設定的值。做如下修改: errno = 0;/*  調用庫函數  */if(errno)/* 處理錯誤

編程調試技巧

 printf(核心態為printk)是我覺得最好的調試工具,我碰到的大部分問題也是通過在代碼中列印調試資訊來分析錯誤源的位置,但當我們寫的代碼需要發布時,這些調試資訊則是多餘的,而當我們再次發現bug時,可能又需要加入一些調試資訊,於是我們可能想尋求一種方法可以控制print函數是否列印調試資訊,預先處理宏可協助我們實現這一功能。    #undef PDEBUG /* undef it, just in case */#ifdef DNFS_DEBUG# ifdef __KERNEL__/*

兩城一家:親朋為你買單

去年寒假,中國移動推出“兩城一家”“優惠”活動。口號是兩城一家,實惠到家!暢享移動新生活。資費標準如下:  想到我回家後可能會經常接打電話,覺得這項業務辦理了很划算,於是就開通了。的確,在家裡,“兩城一家”給我省了不少錢,還納悶移動怎麼這麼傻,一個月2元的功能費,給我省了這麼多錢。     直到前些天,一個親戚問我,怎麼跟我打幾次電話,話費用得那麼快,我才恍然大悟,移動才不傻呢,傻的永遠是消費者。 我回家後,當得知我辦理了“兩城一家”業務電話中不收費後,親朋好友有事都是直接打My

靜態庫與動態庫

 函數庫分為靜態庫和動態庫兩種 靜態庫在程式編譯時間會被串連到目標代碼中,程式運行時將不再需要該靜態庫。動態庫在程式編譯時間並不會被串連到目標代碼中,而是在程式運行是才被載入,因此在程式運行時還需要動態庫存在。 範例程式碼: 標頭檔  hello.h    #ifndef _HELLO_H#define _HELLO_Hvoid hello(void);#endif 源檔案  hello.c void hello(void){    printf("hello world\n");} 源檔案 

RSA演算法核心態移植

line-height:18.0pt;mso-line-height-rule:exactly;mso-pagination:widow-orphan">最近項目中需要在核心態使用RSA密碼編譯演算法,密碼編譯演算法對我來說是一篇空白,到網上瞭解了些,比較好的加密跟認證的庫有openssl,crypto++等,但這些庫很龐大,而且很多東西因為考慮到複用,而不是單獨為實現一個RSA演算法而實現,在使用者態使用非常方便,只有下載openssl的源碼,安裝即可調用其實現的加密算庫,包括AES,Blow

注意編程規範

    最近要將一個演算法應用到分布式系統中,以前由於急著想實現這個演算法(涉及到矩陣),於是就使用了C++的stl(用了string和vector),主要是方便二維數組參數的傳遞以及數組長度的自動管理,後來很方便的實現了。   三天前開始把演算法往系統中移植,問題來了。系統全部用C寫的,演算法模組用C++實現的,於是又一下幾種方式:1,將整個系統用g++重新編譯成c++程式,因為系統與檔案系統有關,而kernel完全由C實現,所以不做考慮。2,C語言調用C++的函數??

二維數組參數傳遞

方法1:形參給出第二維的長度 #include <stdio.h>void func(int n, char str[][5]){           int i;           for (i = 0; i < n; i++)           {                   printf("\nstr[%d] = %s\n", i, str[i]);           }}int main(){           char str[][5] =

再讀FUSE核心原始碼

fuse核心模組被載入時,以下初始化常式會被調用,見fuse_init函數<inode.c>。1.  fuse_fs_init();  註冊fuse檔案系統,建立fuse_inode快取。2.  fuse_dev_init(); 建立fuse_req快取,載入fuse裝置驅動,用於使用者空間與核心空間交換資訊。3.  fuse_sysfs_init(); 在/sys/fs目錄下增加fuse節點,在fuse節點下增加connections節點。4.  fuse_ctl_init();

標準I/O緩衝區詳解

    標準I/O庫提供緩衝的目的是儘可能地減少使用read和write調用的次數。他也對每個I/O流自動地進行緩衝管理,從而避免了應用程式需要考慮這一點所帶來的麻煩。不幸的是,標準I/O庫最令人迷惑的也是他的緩衝。    標準I/O提供了三種類型的緩衝:    1、全緩衝。這種情況下,在填滿標準I/O緩衝區後才進行實際I/O操作。對於駐留在磁碟上的檔案通常是由標準I/O庫實施全緩衝。一個流上執行第一次I/O操作時,相關標準I/O函數通常調用malloc獲得需使用的緩衝區。   

部落格徵文活動獲獎感言

4月1號在火車上收到快遞公司的電話,cublog的禮物送到了,開始以為只是很普通的襯衣,然後印上CU的標誌,昨天看到禮物發現居然是cerruti,品質很不錯,小雅姐果然很給力。 這次參加“驀然回首,部落格五年”的部落格徵文活動,其實給CU寫的意見博文是在徵文活動之前,因為我很早就在關注CU部落格系統升級的訊息,所以在第一時間就體驗了一下新的部落格系統,並提了幾點意見,所以說這次能拿到獎品也完全是小雅姐的照顧。(給cublog的意見:http://blog.chinaunix.net/space.

編程技巧—節省空間的

資料空間技術      ----如何減少程式所需要資料的儲存空間的技術 1,不儲存,重新計算。    如果我們在需要某一個給定對象的任何時候,都對其進行重新計算而不儲存,就可以減少該對象所需的空間。該方法用計算時間換空間,只使用於需要儲存的對象可以根據其描述重新計算得到的情況。 2,稀疏資料結構    例1:疏鬆陣列的的儲存(很多個0,或其他相同的項)。  

函數參數傳遞

 測試例子: #include <stdio.h>void print(char *arr){    printf("%#x %#x %#x\n", &arr, arr, arr[0]);}int main(){    char arr[5] = "abcd";    printf("%#x %#x %#x\n", &arr, arr, arr[0]);    print(arr);    return 0;}輸出:0xbf849b8b 0xbf849b8b 0x61

隨機洗牌演算法

問題:給定一個有序序列1~n,要你將其完全打亂,要求每個元素在任何一個位置出現的機率均為1/n。解決方案:依次遍曆數組,對第n個元素,以1/n的機率與前n個元素中的某個元素互換位置,最後產生的序列即滿足要求,1/n的機率可通過rand() % n實現。見如下程式:void swap(int* p, int* q){    int tmp = *p;    *p = *q;    *q = tmp;} void shuffle(int *arr, int n){    int i;    for(

open標誌解析

 open的標誌並不是每1位對應一個標誌,對於讀寫的標誌,在open時必須指定一個,其宏定義如下,檢查讀寫標誌時,不能簡單當使用異或,將標誌與O_ACCMODE進行與操作,擷取標誌的低兩位來確定讀寫標誌。 /usr/include/bits/fcntl.h#define O_ACCMODE          0003#define O_RDONLY             00#define O_WRONLY             01#define O_RDWR               

RPC擷取調用方IP地址

在項目中遇到一個問題,當用戶端通過SUN

移植使用者態程式到核心態

Linux環境下,在核心寫程式限制很多,相比使用者態程式:n  不能使用C庫n  不能使用系統調用n  理解核心各個部分的實現原理及相關函數的機制及作用n 

Socket編程小結(續)

mso-char-indent-count:0;mso-list:l1 level1

磁碟效能測試分析

使用HD Tune Pro測試了下磁碟的效能,在老大的協助下把測試的結果弄清楚了。 1.       裸盤的測試(讀) 測試結果顯示,磁碟速率不斷跳躍式的下降,應該是從磁碟的沿著磁碟外道到內道讀取資料,由於外圈的線速度遠大於內圈,故在外圈速率也會高些,而不斷的跳躍則是出現在磁碟磁碟換道的時刻。快結束的時候出現了一個大幅度的下降,因為測試時系統運行著很多其他的應用程式,應該是受到其他進程的影響才出現的。  2.      

幾個有用的宏

1.  列印錯誤資訊如果程式的執行必須要求某個宏被定義,在檢查到宏沒有被定義是可以使用#error,#warning列印錯誤(警告)資訊,如:#ifndef __unix__#error "This section will only work on UNIX systems"#endif只有__unix__宏被定義,程式才能被正常編譯。 2.  方便調試__FILE, __LINE,

總頁數: 61357 1 .... 10640 10641 10642 10643 10644 .... 61357 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.