Time of Update: 2017-01-18
在Linux中建立一個新進程的唯一方法是使用fork()函數。fork()函數是Linux中一個非常重要的函數,和以往遇到的函數有一些區別,因為fork()函數看起來執行一次卻返回兩個值。fork()函數用於從已存在的進程中建立一個新進程。新進程稱為子進程,而園進程稱為父進程。使用fork()函數得到的子進程是父進程的一個複製品,它從父進程處繼承了整個進程的地址空間,包括進程的上下文、程式碼片段、進程堆棧、記憶體資訊、開啟的檔案描述符、符號控制設定、進程優先順序、進程組號、當前工作目錄、根目錄、
Time of Update: 2017-01-18
先來看這樣一個例子,利用fork調用execlp()函數來在Linux下實現ps或ls命令:#include "sys/types.h"#include "unistd.h"#include "stdio.h"#include "stdlib.h"int main(){ pid_t result; result=fork(); //報錯處理 if(result==-1) { printf("Fork Error\n"); } //son else if(result==0)
Time of Update: 2017-01-18
由fork建立的新進程被稱為子進程(child
Time of Update: 2017-01-18
一、fork入門知識一個進程,包括代碼、資料和分配給進程的資源。fork()函數通過系統調用建立一個與原來進程幾乎完全相同的進程,也就是兩個進程可以做完全相同的事,但如果初始參數或者傳入的變數不同,兩個進程也可以做不同的事。一個進程調用fork()函數後,系統先給新的進程分配資源,例如儲存資料和代碼的空間。然後把原來的進程的所有值都複製到新的新進程中,只有少數值與原來的進程的值不同。相當於複製了一個自己。 我們來看一個例子:#include <unistd.h>
Time of Update: 2017-01-18
C++類型檢查更加嚴格c語言中,當字元當做函數參數傳入是,都把字元當整型int使用,sizeof('c') = sizeof(int); 更進一步,c編譯器把字元常量等同於整數常量處理: putchar(10) 同 putchar('\n') 等效。但是,C++中, sizeof('c') == 1, 補充說明一點, sizeof(wchar_t) ==4。 因此可以很容易代表65,536個不同的Unicode字元。
Time of Update: 2017-01-18
在c++中,當一個類含有虛函數的時候,類就具有了多態性。建構函式的一項重要功能就是初始化vptr指標,這是保證多態性的關鍵步驟。建構函式初始化vptr指標下面是c++源碼:class X {private: int i;public: X(int ii) { i = ii; } virtual void set(int ii) {//虛函數 i = ii; }};int main() { X x(1);}下面是對應的main函數彙編碼:_main PROC; 16 :
Time of Update: 2017-01-18
朋友面試的一道面試題,分享給大家,面試官經常會問到的,實現string類的四大基本函數必掌握。一個C++類一般至少有四大函數,即建構函式、拷貝建構函式、解構函式和賦值函數,一般系統都會預設。但是往往系統預設的並不是我們所期望的,為此我們就有必要自己創造他們。在創造之前必須瞭解他們的作用和意義,做到有的放矢才能寫出有效函數。 #include <iostream> class CString { friend std::ostream & operator<<(std:
Time of Update: 2017-01-18
我們先回顧下,什麼是指標?什麼是常量?指標是一種特殊的變數,它裡面儲存的內容是記憶體位址。常量是指其裡面儲存的內容不能發生改變的量。明白了這兩個概念後,我們現在正式進入指標常量與常量指標。1.指標常量與常量指標的概念指標常量就是指標本身是常量,換句話說,就是指標裡面所儲存的內容(記憶體位址)是常量,不能改變。但是,記憶體位址所對應的內容是可以通過指標改變的。常量指標就是指向常量的指標,換句話說,就是指標指向的是常量,它指向的內容不能發生改變,不能通過指標來修改它指向的內容。但是,指標自身不是常量
Time of Update: 2017-01-18
C語言實現字元轉unix時間戳記,需要先轉成tm類型,再得到它的Unix時間戳記。附上實現代碼:#include <stdio.h>#include <time.h>int strtotime(char datetime[]){struct tm tm_time;int unixtime;strptime(datetime, "%Y-%m-%d %H:%M:%S", &tm_time);unixtime = mktime(&tm_time);return
Time of Update: 2017-01-18
1、演算法時間是有周期規律的,4年一個周期(平年、平年、平年、閏年)共計1461天。Windows上C庫函數time(NULL)返回的是從1970年1月1日以來的毫秒數,我們最後算出來的年數一定要加上這個基數1970。總的天數除以1461就可以知道經曆了多少個周期;總的天數對1461取餘數就可以知道剩餘的不足一個周期的天數,對這個餘數進行判斷也就可以得到月份和日了。當然了,C語言庫函數:localtime就可以獲得一個時間戳記對應的具體日期了,這裡
Time of Update: 2017-01-18
展示一下使用指標的指標和指標的引用修改傳遞給方法的指標,以便更好的使用它。(這裡說的指標的指標不是一個二維數組)為什麼需要使用它們 當我們把一個指標做為參數傳一個方法時,其實是把指標的複本傳遞給了方法,也可以說傳遞指標是指標的值傳遞。如果我們在方法內部修改指標會出現問題,在方法裡做修改只是修改的指標的copy而不是指標本身,原來的指標還保留著原來的值。我們用下邊的代碼說明一下問題:int m_value = 1;void func(int *p){ p = &m_value;}int
Time of Update: 2017-01-18
指標在編程中有時很重要的作用我們可以用它完成一些看似不可能完成的任務#include<iostream>using namespace std;void square(int *n){*n=*n**n;}int main(){int num = 2;cout<<"The original number is "<<num<<endl;square(&num);cout<<"The new value of number is "<
Time of Update: 2017-01-18
淺談時間戳記與日期時間互轉C語言/* * ctime.h * * Created on: May 19, 2016 * */ #ifndef CTIME_H_#define CTIME_H_#include "common/micro_type.h"#define OFFSET_SECOND 946684800 /* ��1970/1/1/0/0/0��2000/1/1/0/0/0֮��
Time of Update: 2017-01-18
C和指標相關基礎知識:記憶體的分配(譚浩強版)1、整型變數的地址與浮點型/字元型變數的地址區別?(整型變數/浮點型變數的區別是什麼)2、int *p,指向整型資料的指標變數。3、通過指標變數訪問整型變數。4、*p :指標變數p指向的儲存單元(變數)5、p = &a——>> *p =
Time of Update: 2017-01-18
在學習c++的過程中,也曾經學習java,就發現java有類的嵌套,而看的c++的書,從來沒有哪個講c++的類可以嵌套,於是就試了一下,看是否c++可以嵌套類(編譯環境vc++6.0)於是有了下面的代碼:#include <iostream>using namespace std;class A{public: A(){ cout<<"this a"<<endl; } ~A(){cout<<"a dead"<<endl;}
Time of Update: 2017-01-18
引言隨機函數演算法應該是電腦史上最重要的十大演算法之一吧. 而C中使用的隨機函數#include <stdlib.h>_Check_return_ _ACRTIMP int __cdecl rand(void); 本文主要圍繞rand 函數找到G點. 就是偽隨機函數的周期值.關於rand 源碼, 可以從Linux底層源碼 glibc中找. 看了一下大約4個檔案. 演算法比較複雜. 感覺很穩定.這裡不探討隨機演算法的實現. 只為了找到
Time of Update: 2017-01-18
1. 概述簡單地說,每一個含有虛函數(無論是其本身的,還是繼承而來的)的類都至少有一個與之對應的虛函數表,其中存放著該類所有的虛函數對應的函數指標。例:其中:B的虛函數表中存放著B::foo和B::bar兩個函數指標。D的虛函數表中存放的既有繼承自B的虛函數B::foo,又有重寫(override)了基類虛函數B::bar的D::bar,還有新增的虛函數D::quz。提示:為了描述方便,本文在探討對象記憶體布局時,將忽略記憶體對齊對布局的影響。2.
Time of Update: 2017-01-18
當開發外掛程式的時候需要用到反射,在用戶端動態載入遍曆程式集,並調用每個程式集的方法。建立一個控制台應用程式,首先設計一個介面:public interface ISay { void SaySth(); } 在控制台應用程式下建立Plugins檔案夾,控制台的可執行檔和所有組件檔都產生在這裡。右鍵控制台項目--"屬性"--"產生",把"輸出路徑"設定成Plugins檔案夾。建立類庫項目Assembly1,添加對控制台項目的引用,並建立實現ISay介面的類:namespace
Time of Update: 2017-01-18
一、重載(overload)指函數名相同,但是它的參數表列個數或順序,類型不同。但是不能靠傳回型別來判斷。(1)相同的範圍(在同一個範圍中) ;(2)函數名字相同;(3)參數不同;(4)virtual 關鍵字可有可無。(5)傳回值可以不同;二、重寫(也稱為覆蓋 override)是指衍生類別重新定義基類的虛函數,特徵是:(1)不在同一個範圍(分別位於衍生類別與基類) ;(2)函數名字相同;(3)參數相同;(4)基類函數必須有 virtual 關鍵字,不能有 static
Time of Update: 2017-01-18
fork的意義下圖為,C 程式的儲存空間布局(典型)1.一個現有進程可以調用 fork 函數建立一個新進程。2.fork 函數被調用一次,但返回兩次, 兩次返回的唯一區別是子進程的傳回值是 0, 而父進程的傳回值是新子進程的 PID。3.子進程和父進程繼續執行 fork 調用之後的指令。在上圖的儲存空間布局中,父子進程只共用本文段,其餘的都各自有獨立的副本 (通常使用 copy-on-write 的策略,速度比較快)。fork 的兩種用法1.父子進程同時執行不同的程式碼片段典型應用:Web