Linux下共用庫中的全域變數,靜態變數是否只有一份?

當有多個程式使用同一個共用庫的時候,我們都知道,多個程式有多個進程,但是共用庫在記憶體中只有一份。所以問題來了:如果我在共用庫中定義了全域變數,那 麼全域變數是不是也只有一份?如果是這樣,那麼當多個進程都在使用這個共用庫的時候,就有問題了。比如:我們在共用庫中定義了一個全域變數 server_inited,用來表示一個socket server是否已經啟動成功了,如果這個變數是TRUE,那麼,下次使用者調用啟動server的函數的時候,這個函數一check這個變數,發現已經是

Linux下編譯一個靜態連結的程式的注意點

1. ld的-static開關加上之後,就可以編譯出一個靜態連結的程式了。要注意該程式用到的所有的庫,都要有相應的.a版本,編譯的時候作為一個source file放到命令列中即可。光有庫的.so沒用,需要重新編譯該庫,讓它產生.a檔案。2. 要注意ld的一個特性:當ld尋找一個symbol的時候,ld只會往後尋找,不會往前尋找。比如程式以來兩個庫A和B,而A庫又調用了B庫中的函數,那

Linux 指令碼和程式對SIGINT的處理方案,指令碼通過kill給程式傳遞訊號

效能測試中,Tester程式由start.sh指令碼來啟動。現在的需求是:使用者按下ctrl-c,程式能graceful退出,從而不用重啟板子。問題 是:ctrl-c產生訊號SIGINT,但是這個訊號是傳遞給指令碼進程的,不是傳遞給Tester進程的。所以這裡就存在一個訊號傳遞的問題。解決辦法如 下: 1. 在指令碼中加入代碼: Code: Select allforward_sigint(){    # check out the tester's pid   

Linux下semaphore的使用 — 進程間互斥的一個好方法

semaphore很類似windows下的kernel object,一旦建立,可以被多個進程使用,當然一個進程中多個線程也可以使用semaphore來互斥。談到互斥,一般semaphore的值就是 1。man 7 sem_overview可以看到很多有用的資訊,再結合sem_open, sem_wait,

Linux下編寫動態連結程式庫,如何定義一個init和finalize的方法?

共用庫的初始化和~初始化函數分析 轉載時請註明出處:http://blog.csdn.net/absurd/ Win32下可以通過DllMain來初始化和~初始化動態庫,而Linux下則沒有與之完全對應的函數,但可以通過一些方法類比它的部分功能。有人會說,很簡單,實現_init/_fini兩個函數就行了。好,我們來看看事實是不是這樣的。 很多資料上都說可以利用_init/_fini來實現,而我從來沒有測試成功過,原因是這兩個函數都已經被gcc佔用了。比如: test.c Code:

有關Linux下線程的調度

由於Linux對線程實現的一些特殊性,所以會給我們理解線程及其相關的一些函數帶來疑惑,這裡做個解答: 1、關於sleep 很多書籍上都說sleep這個系統調用會使整個進程sleep,而不單是sleep一個線程。這樣說沒錯,但我們要是在Linux下寫一個多線程 的程式,在一個線程中調用sleep,你會發現其他線程照樣運行,這是怎麼回事呢?這就是由於Linux下的線程,其實線程的註冊、銷毀等工作是在

Linux crypt函數的使用

crypt函數用來加密,目前Linux平台上加密的方法大致有MD5, DES, 3 DES 在RedHat平台上MD5和DES用的多一些。crypt函數的原形是: char *crypt(const char *key, const char *salt); key就是我們要傳入的明文,salt是我們指定用來加密的密鑰,傳回值就是加密後的密文。 關鍵就是這個密鑰salt,這裡通過我們的實驗,發現:

從gettext來看linux下程式的internationalization

在看lftp的原始碼的時候,看到了程式的一開頭有這樣幾句代碼: setlocale (LC_ALL, ""); setlocale (LC_NUMERIC, "C"); bindtextdomain (PACKAGE, LOCALEDIR); textdomain (PACKAGE); 註:PACKAGE, LOCALEDIR都是宏,在autoconf的時候自動產生,PACKAGE宏就是lftp, LOCALEDIR就是/usr/share/locale

Linux 3D Programming — VTK 5.0安裝指南

1. 首先在VTK的網站:http://www.vtk.org 上可以下載到VTK的源碼(VTK不提供Precompiled binary版本,所以,VTK的安裝都必須要手動自己編譯),Down下來之後解開。VTK的網站上還有VTK Data下載,這是VTK Example程式運行時所需要的資料檔案,如果我們想在安裝完VTK後做一些示範和測試,那麼就需要下載這個包。我的意見是不用下載了,VTK安裝完成 後,我們用VTK網站上提供的兩個Example

將訊號用作 Linux 調試工具 – From IBMDW

本文介紹了如何用訊號來調試一個程式。眾所周知,在Linux編程中,經常會遇到程式segment fault或其他類似的錯誤,這些錯誤比較難調試,本文就介紹了用訊號來調試這種錯誤的方法。 當一個程式訪問一個未分配記憶體的地址時或其他情況時,會產生segment fault錯誤,此時程式會產生一個SIGSEGV的訊號,所以,我們的程式可以捕獲這個訊號,並列印出是哪條指令導致了該錯誤,及產生該錯誤時CPU各寄存器的值,從而定位出問題所在。 本文舉了兩個很好的例子,一個是對SIGILL訊號的處理,比如,

Linux Enterprise Cluster Notes -Ch11 LVS Introduction Theory

1. 本章介紹LVS的一些相關概念,調度策略和叢集架構類型。下一章開始講解LVS-NAT叢集 2. 從Linux核心2.4.23開始,加入了一個叫做IP Virtual Server(IPVS)的特性,這就使得我們可以把一台Linux機器作為一個load balancer來使用。LVS就是一個很好的構建Linux load balance叢集的軟體。 3. LVS Address Name Conventions. 這裡介紹一下LVS中會提到的多種IP的專有名稱,其實看圖就明白了:見附件1

Linux Enterprise Cluster Notes — Ch10 build a Linux cluster

1. 本章講解概念,沒有太多技術要點。 2. LVS-NAT Cluster. 這是一種基於LVS的load balance的叢集構架方式。一堆伺服器從一台NAT Server出去,所有的請求和返回資訊都要經過NAT Server,所以這台NAT Server是瓶頸,後面會詳細介紹。 3. LVS-DR Cluster. DR means "Direct Routing",這種LVS load

Linux Enterprise Cluster NOtes — Ch7 A Sample HA config

本章介紹了一個heartbeat的最簡單配置,以下是硬體上的串連圖(附件1): 從圖上可以看出,兩台伺服器使用乙太網路作為心跳線,分配的IP地址分別是10.1.1.1和10.1.1.2,BTW,在RFC1918中,規定可以用來做private network的IP地址為: 10.0.0.0 to 10.255.255.255 (10/8 prefix) 172.16.0.0 to 172.31.255.255 (172.16/12 prefix) 192.168.0.0 to 192.168

Linux Enterprise Cluster NOtes — Ch6 Heartbeat介紹和原理

1. heartbeat是一個軟體包,實現HA的功能(目前heartbeat只支援雙機的HA)。原理很簡單,設定一個primary server,設定一個需要HA的resource,然後將其他的機器(稱為backup server)和這台server連起來, backup servers不停的接收來自primary server的heartbeat,一旦heartbeat中斷,那麼,backup server接替工作。 2. 為了放置primary server和backup

Linux Enterprise Cluster NOtes — Ch9 Stonith and IPFail

1. 本章詳細介紹stonith,當兩台伺服器都嘗試要去接管資源的時候,就會出現split-brain的情況,當“心跳線”出現問題的時候,最容易出現這 種情況。這種情況是很致命的,他可能導致服務無法正常運行,更壞的是,有可能導致資料遭破壞,因為此時兩台伺服器都可能對一個資料來源進行讀寫,這就很有可 能導致問題,就算兩台伺服器都只會寫各自的存放裝置,但也會導致兩台伺服器的儲存內容不一致,所以這種情況要盡量避免,heartbeat給出的解決方案 就是--stonith 2.

Linux Enterprise Cluster NOtes — Ch8 Heartbeat配置和維護

本章進一步講解haresources檔案的配置和heartbeat日常的維護問題。 1. /etc/ha.d/haresources檔案中的每一行都將定義resource,每一行的書寫文法是這樣的: resource-owner-hostname [IPaddress] resource1[::arg1::arg2] [resource2[::arg1::arg2] 上面可以看到,第一列寫的是擁有該項資源的primary

linux下手動刪除資料庫執行個體

  linux下手動刪除資料庫執行個體,直接刪除相應的目錄就可以了,不多說了....1. $ORACLE_HOME/dbs/[oracle9@frogger dbs]$ pwd/u01/app/oracle/product/9.2.0.1/dbs[oracle9@frogger dbs]$ rm inittest02.ora[oracle9@frogger dbs]$ rm orapwdtest022. $ORACLE_BASE/oradata/SID[oracle9@frogger

linux(Ubuntu)下常用命令

在使用下面的命令是可以通過--help來擷取更多的資訊1,查詢目前的目錄檔案清單:lsls命令預設狀態下將按首字母升序列出你當前檔案夾下面的所有內容,但這樣直接運行所得到的資訊也是比較少的,通常它可以結合以下這些參數運行以查詢更多的資訊: ls / 顯示/.下的所有檔案和目錄 ls -l 給出檔案或者檔案夾的詳細資料ls -a 顯示所有檔案,包括隱藏檔案ls -h

學習–linux下的程式和進程

      程式和進程是作業系統中的重要概念,程式是可啟動並執行一組指令,程式以二進位代碼的形式儲存在存放裝置中。作業系統運行程式後,該程式在記憶體中的映像就是進程,進程是活動的程式。1、程式    

linux(ubuntu)與windows xp雙系統時間不統一

  啟動ubuntu後,再次啟動windows xp系統,時間就差了 8個小時,最後上網搜了以下,解決了這個問題。以下是解決方案:       sudo gedit /etc/default/rcS開啟系統文檔後,修改其中UTC=no;原因:debian本地時間顯示的是UTC時間,而國際標準時間卻是CST時間。也就是說本地時間落後8個小時。每次關機,debian都會將UTC時間儲存在BIOS裡,這樣在再次啟動windows xp系統裡,時間就落後8小時。

總頁數: 4065 1 .... 176 177 178 179 180 .... 4065 Go to: 前往
Tags Index:

聯繫我們

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

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