原创 UNIX I/O

文件描述符: 文件描述符是一個非負整數。當打開一個現存文件或創建一個新文件時,內核向進程返回一個文件描述符。文件描述符 0、1、2 (通常使用<unistd.h>中定義的 STDIN_FILENO, STDOUT_FILENO, STDE

原创 gcc的簡單使用

gcc是一系列的軟件的組合 首先,gcc通過cpp預處理器將源程序進行擴展,包括頭文件的展開和宏的展開,形成.i文件,然後,gcc通過cc1編譯器進行編譯,生成彙編程序,通過彙編器as產生可重定位的目標程序,可重定位表示代碼段、數據段

原创 編譯與鏈接的簡單過程小結

一些集成IDE隱藏了處理的細節,其實一個程序的編譯大體上可以分爲如下幾個步驟: 預處理->編譯->彙編->鏈接 預處理:產生.i文件 gcc -E hello.c -o hello.i cpp hello.c > hello.i 1。展

原创 Dijkstra in python

下面是一段由python實現的Dijkstra算法,一些地方的處理實在非常棒,相比於C,代碼的數量已經縮減到了60行,所以我想通過本文簡單的介紹一下這段代碼的細節之處,首先給出源程序: from sys import argv de

原创 動態規劃之 矩陣鏈乘法

承接着上一篇的裝配線調度問題,下一個要解決的問題是矩陣鏈乘法問題:給定n個要相乘的矩陣構成序列<A1,A2,...,An>,計算乘積A1A2...An。爲了得到計算的結果,可以將兩個矩陣相乘的算法作爲一個子程序,根據括號的順序做全部的矩陣

原创 現代操作系統筆記之 進程間通信(上)

進程間的通信其實就是要解決3個問題1、一個進程如何把信息傳遞給另一個進程2、怎麼處理多個進程在關鍵活動中不出現交叉3、確保進程處理的順序性。當然,進程間的通信同樣也是適合線程,對於第一個問題,由於線程是共享同一個地址空間,通信比較容易,要

原创 C++編程技術之 異常處理(上)

增強錯誤恢復能力是提高代碼健壯性的最有力途徑之一 之所以平時編寫代碼的時候不願意去寫錯誤處理,主要是由於這項工作及其無聊並可能導致代碼膨脹,導致的結果就是本來就比較複雜的程序變得更加複雜。當然了,前面的緣由主要是針對C語言的,原因就在於C

原创 gdb的簡單使用

gdb是GNU debuger的縮寫,在使用gcc生成目標代碼文件後,可以使用gdb對其進行調試。 gdb的功能 1.隨心所欲的運行程序 2.設置斷點,斷點可以是某一行或是某一個函數的入口,甚至是條件表示 3.每一步執行可以查看當前的所有

原创 最長公共子序列(LCS問題)

先簡單介紹下什麼是最長公共子序列問題,其實問題很直白,假設兩個序列X,Y,X的值是ACBDDCB,Y的值是BBDC,那麼XY的最長公共子序列就是BDC。這裏解決的問題就是需要一種算法可以快速的計算出這個最大的子序列,當然,用最簡單的方法就

原创 現代操作系統筆記之 線程

線程其實就像是對進程的進一步劃分,每個進程都擁有自己的地址空間,而在這一個地址空間中可能存在多個控制線程。 線程的使用 爲什麼需要線程?以下是幾點原因 1、許多應用中同時有多個活動,某些活動可能會阻塞,將這些活動分配到不同的線程可以使程序

原创 現代操作系統筆記之 進程

進程:對正在運行程序的一個抽象 對於只有一個用戶的PC,當啓動系統時,會同時啓動許多進程,而CPU則在這些進程之間進行切換。嚴格的說,在某一瞬間,CPU只能運行一個進程,而在1秒內,它可以運行多個進程,這就造成了並行的錯覺,稱爲僞並行。用

原创 動態規劃之 裝配線調度問題

從之前提到的最長公共子序列的問題中已經可以看到動態規劃的應用之處,但是對於這種算法,或者說是一種思想,該在什麼地方使用,哪些問題的解決可以使用動態規劃,可能並不清晰。下文所講述的內容就是可用動態規劃解決問題的兩個要素:最優子結構和重疊子問

原创 動態規劃概述

在之前的裝配線調度和矩陣鏈乘法的問題上,大體上已經對如何去解決一個動態規劃問題的步驟有了一定的瞭解。但是,對於什麼問題可以用動態規劃求解,動態規劃的問題有什麼明顯的特徵,或許並不是很清晰,所以下文主要簡單的討論動態規劃問題的主要要素,並且

原创 Python文本處理(2)

訪問子字符串(獲取記錄中某些字段的數據) 解決方法: 切片,但只能取得一個字段  theline='I Love Python' afield=theline[2:6] print afield 結果 Love如果需要考慮字段的長度,使

原创 C++編程技術之 異常處理(下)

標準異常: 使用標準庫定義的異常要比先前的自己創建異常類方便得多,當然,也可以從標準異常類中派生出自己的類。 所有的標準異常都是從exception類派生的,該類定義在<exception>中,主要的兩個派生類爲logic_error和r