盛世cp源碼
① c++源文件 不同後綴(.cc .cpp .C .cp)的區別
VC里用cpp作後綴名, 在GCC里默認採用C、cc、cxx作為後綴名
.cpp, .h (VS file)
.cc, .h (GCC file)
C中:
頭文件後綴名: .h
源文件後綴名: .c
C++中:
頭文件後綴名: .h, .hpp, .hxx
源文件後綴名:.cpp, .cc, .cxx, .C .c++
這是現在不同標准下給出的擴展名:
Unix: C, cc, cxx, c
GNU C++: C, cc, cxx, cpp, c++
Digital Mars: cpp, cxx
Borland: C++ cpp
Watcom: cpp
Microsoft Visual C++: cpp, cxx, cc
Metrowerks CodeWarrior: cpp, cp, cc, cxx, c++
這些東西其實就是個標注,給人看的,叫什麼無所謂,只要能看出和c有關但也有別就行
我大膽YY一下:
c++就是直接用語言的名字命名的擴展名,cpp也類似(C Plus Plus)
但有些系統可能不支持在文件名里放入加號"+"
所以有用x代替+(你不覺得x很像斜倒下來的加號么……),於是有了cxx
而C和cc則是代表這是c的「加大」或「加強」版
當然,C這個擴展名在Win系統下用顯然不合適,因為Win是大小寫不敏感系統
對Win來說"test.c"和"TEST.C"是完全相同的文件名
但在linux/Unix平台上就不同了
GCC 中以 .s為後綴的文件,是匯編語言源代碼文件
-----------------------------------------------------
GCC文件後綴名:
.c為後綴的文件,C語言源代碼文件;
.a為後綴的文件,是由目標文件構成的檔案庫文件;
.C,.cc或.cxx 為後綴的文件,是C++源代碼文件;
.h為後綴的文件,是程序所包含的頭文件;
.i 為後綴的文件,是已經預處理過的C源代碼文件;
.ii為後綴的文件,是已經預處理過的C++源代碼文件;
.m為後綴的文件,是Objective-C源代碼文件;
.o為後綴的文件,是編譯後的目標文件;
.s為後綴的文件,是匯編語言源代碼文件;
.S為後綴的文件,是經過預編譯的匯編語言源代碼文件。
② linux中cp命令如何用 C語言實現
1,首先需要了解cp的原理。
2,可以參考cp的源碼去了解其原理
3,cp命令的源碼可以在linux內核中找到。
4,或者下載busybox其中也會有cp的源碼
只有了解其原理之後才能談如何實現。參考代碼如下:
#include<stdio.h>
#include<stdlib.h>
#include<sys/stat.h>
#include<sys/types.h>
#include<fcntl.h>
#include<errno.h>
#include<unistd.h>
#include<string.h>
#defineBUF_SIZE1024
#definePATH_LEN128
voidmy_err(char*err_string,intline)
{
fprintf(stderr,"line:%d",line);
perror(err_string);
exit(1);
}
void_data(constintfrd,constintfwd)
{
intread_len=0,write_len=0;
unsignedcharbuf[BUF_SIZE],*p_buf;
while((read_len=read(frd,buf,BUF_SIZE))){
if(-1==read_len){
my_err("Readerror",__LINE__);
}
elseif(read_len>0){//把讀取部分寫入目標文件
p_buf=buf;
while((write_len=write(fwd,p_buf,read_len))){
if(write_len==read_len){
break;
}
elseif(write_len>0){//只寫入部分
p_buf+=write_len;
read_len-=write_len;
}
elseif(-1==write_len){
my_err("Writeerror",__LINE__);
}
}
if(-1==write_len)break;
}
}
}
intmain(intargc,char**argv)
{
intfrd,fwd;//讀寫文件描述符
intlen=0;
char*pSrc,*pDes;//分別指向源文件路徑和目標文件路徑
structstatsrc_st,des_st;
if(argc<3){
printf("用法./MyCp<源文件路徑><目標文件路徑> ");
my_err("argumentserror",__LINE__);
}
frd=open(argv[1],O_RDONLY);
if(frd==-1){
my_err("Cannotopnefile",__LINE__);
}
if(fstat(frd,&src_st)==-1){
my_err("staterror",__LINE__);
}
/*檢查源文件路徑是否是目錄*/
if(S_ISDIR(src_st.st_mode)){
my_err("略過目錄",__LINE__);
}
pDes=argv[2];
stat(argv[2],&des_st);
if(S_ISDIR(des_st.st_mode)){//目標路徑是目錄,則使用源文件的文件名
len=strlen(argv[1]);
pSrc=argv[1]+(len-1);//指向最後一個字元
/*先找出源文件的文件名*/
while(pSrc>=argv[1]&&*pSrc!='/'){
pSrc--;
}
pSrc++;//指向源文件名
len=strlen(argv[2]);
//.表示復制到當前工作目錄
if(1==len&&'.'==*(argv[2])){
len=0;//沒有申請空間,後面就不用釋放
pDes=pSrc;
}
else{//復制到某目錄下,使用源文件名
pDes=(char*)malloc(sizeof(char)*PATH_LEN);
if(NULL==pDes){
my_err("mallocerror",__LINE__);
}
strcpy(pDes,argv[2]);
if(*(pDes+(len-1))!='/'){//目錄缺少最後的'/',則補上』/『
strcat(pDes,"/");
}
strcat(pDes+len,pSrc);
}
}
/*打開目標文件,使許可權與源文件相同*/
fwd=open(pDes,O_WRONLY|O_CREAT|O_TRUNC,src_st.st_mode);
if(fwd==-1){
my_err("Cannotcreatfile",__LINE__);
}
_data(frd,fwd);
//puts("endof");
if(len>0&&pDes!=NULL)
free(pDes);
close(frd);
close(fwd);
return0;
}
③ 如何快速搭建CP程序網路BC系統APP網站平台
1.選定網站伺服器,購買物理伺服器存放網站程序,也可以選擇租用雲伺服器,這類搭建一般選擇免備案的伺服器。2、根據網站程序源碼安裝伺服器或者雲主機操作系統,依照代碼開發的搭建環境要求,選擇合適的操作系統,比如Window2008/NT還是Unix、Linux。根據搭建經驗兼顧穩定性和安全性等。3、網站程序代碼的選擇。是喜歡固定模板源碼基礎還是更有個性化開放的開發程序。建議可以先找原有符合要求主要功能源碼程序,然後再其基礎上開發,這樣既可以省下開發時間又能節省下成本。當然也有弊處,就是後期容易受到原有代碼框架的限制,可能不利於個性化需求。4、網站安防維護。比如伺服器防黑,域名放劫持等等,都要做好預防,防止網站後期運營流量上來之後,容易受到同行或者黑客入侵網站的情況。總結下來就是這類與其它正常網站搭建開發步驟差不多,就是伺服器或者雲空間和域名的選擇上不同,前者選擇境外的免備案節約建站時間和不必要的麻煩。④ linux中的一些常用命令,比如ls、mv、cp等的源代碼在linux 內核源碼樹的什麼目錄什麼文件中啊
linux的這些常用命令的源代碼是不會在內核中的。這些是應用程序而已,所以你還是不要在內核中去找了。網上有這些應用程序的源代碼。
⑤ golang 多人開發怎麼保證源碼安全
隨著PHP有著越來越深入的了解,以及遇到越來越多的不同業務時,使用PHP總會讓我有一種莫名的無力感。當然,並不是我一個人在使用PHP的時候遇到了問題。事實上,每個略微有一些經驗,接觸過一些需求的人都會有同樣的困惑。各種配合LAMP(或者LNMP?)架構的後端技術也因此被發明或被發現,進而整合到PHP的開發的技術體系中。從簡單的Memcached作為數據中轉,cron後端定時處理;到Gearman、RabbitMQ這些隊列神器;最近Laruence甚至封裝了利用libcurl的非同步特性實現並發RPC調用的yar擴展。幾乎整個社區都在尋找PHP的摩西之路。好吧,說了一大堆,回歸主題。之前我寫了一篇英文練筆《》,獲得不少國際友人的關注。排除拼寫和語法被他們詬病外,主要是有許多朋友覺得我沒把事情說清楚。所以這里我用母語重新聊聊這個事情,只是這些國際友人什麼時候能學會閱讀中文呢?;)Go或者Golang,是由Google支持的快速、一致、穩定的,有活躍的社區支持的開源編程語言。越來越多的應用選擇使用Golang進行構建。雖然RobPike說「…我們希望C++程序員來了解Go並作為一個可選的語言…」,不過我真得認為:PHPer應當學習Golang!接下來我們就來談談原因。容易學習PHP相當容易學習。Golang也是!在這點上,一群大老外對我的觀點進行了猛烈的抨擊。他們認為我羞辱了PHPer,說得好像只有簡單的東西PHPer才能學會一樣。但是,這難道不是事實嗎?或者換個說法:像我一樣的喜歡PHP的人,或多或少都會更喜歡簡單的東西。PHP的語法接近C族編程語言(C/C++/java等等)。如果有這些語言的經驗,在第一次遇到PHP的時候立刻就能開始上手編寫代碼。在我看來,編寫PHP代碼或許更加考驗程序員的記憶力,而不是智力(當你面對各種不同風格的函數定義、各種擴展的特殊約定時,你一定會相當認同我的觀點)。Golang同樣是一個C族編程語言。呃,或者有一些不同吧。例如關鍵字「for」,功能上和PHP的接近,但是沒有括弧。條件語句「if」同樣無需括弧。可以閱讀EffectiveGo了解內容。Golang只有3025個關鍵字和47個操作符號、分隔符號或其他特殊標記。記住這些標記確實不需要什麼特別的努力。精巧的類型系統相當容易使用。實用的,具有方法的結構體類型代替了笨重的對象系統。介面的設計是Golang中我最喜歡的部分。當完成了《Go指南》的學習之後,利用PHP積累的經驗,立刻就可以開始使用Golang處理一些簡單的任務。容易使用PHP腳本是由SAPI組件進行解析執行的,如Web伺服器模塊、PHP-FPM或者CLI。部署PHP所需要的全部東西就是一個SAPI環境。配置這個環境對於新手來說可能是學習PHP過程中最為困難的部分。所有的Golang代碼會編譯和鏈接為本地碼。所以除了編譯環境,執行時無需再為其進行任何特別的部署。對比PHP環境的配置,這要簡單很多。你真得認為配置PHP環境很復雜嗎?我不覺得,真的!而配置Golang編譯環境比那還要簡單點。我確信已經有大量的Golang相關的書籍、文章介紹過如何進行編譯環境的配置了。為了更加清晰,我這里梳理一下思路。有三個步驟需要處理:下載Golang的源代碼;根據《[翻譯]Go環境設置》的提示設置環境變數;運行源代碼src目錄中的all.bash。或者一步到位:使用二進制包進行安裝。然後就會得到一個叫做「go」的工具集合。使用「go」工具和使用PHP的CLI工具一樣簡單。《[翻譯]go工具》對此進行了詳細的解釋。PHP的迷思如果一個編程語言容易學習和使用,我們是不是就應當學習它呢?有許多容易學習和使用的編程語言。難道要把它們都學一遍?答案是顯然的:NO!但是呢?只是因為它很酷!是的,我在開玩笑,但是這是真的。無論如何先從PHP自身談起吧。PHP「原本是為了開發動態的Web頁面而設計的伺服器端通用語言(Wikipedia)」。PHP一個重要的特性就是可以嵌入到HMTL中。代碼編寫在「」標簽內;HTML寫在標簽外。它有一個強大的擴展系統。擴展使用C調用ZendAPI編寫。數據的處理實際上要利用這些擴展完成。在我看來,PHP是世界上最好的模板語言。但是當積累了一些PHP的經驗,並且開始面對一些更加復雜的Web應用時,你一定會對PHP產生一種無力的感覺。它沒有內建的並行機制,沒有線程、進程(你真得認為那個簡陋的進程式控制制可以不加改造的用在高並發的生產環境?),或者其他某「程」。一個慢數據源可以阻塞整個頁面的處理。消息隊列、緩存、代理……系統開始不僅僅是PHP這么單純,還包括了許多服務和系統組件。這時,PHP只處理很少的業務邏輯,成為真正的模板語言了。PHPer們總是在尋找解決這一問題的法,如「PHPmultithread」或者PHPRPC並發框架。我很難說哪種會更好一些。不過我肯定你會需要選擇一些編程語言用於後端工作的開發。就我自己的經驗,我嘗試過C(一直在和malloc/free進行搏鬥)/Java(陷入到了jar地獄中)/python(從來沒能做到Pythonic不說,還總是在錯誤的類型中打轉)……如果想要獲得性能,就得同內存管理進行搏鬥;如果用GC,就得部署和調優VM;當獲得便利性的時候,同時也是走在刀尖上,一個小錯誤就引起巨大的災難……每個都有優勢,同樣每個都有問題。好吧!現在回到Golang!Golang有GC,無需關心內存管理(或者可以用較少的精力去關注它)。代碼被編譯為本地碼,因此「cp」和「mv」就是部署Golang編寫的應用所需要的全部工具。噢,我剛才已經說過了,Golang是一個具有靜態類型系統的編譯語言。所以你沒有機會弄亂變數的類型。當然,PHPer應該學習Golang的一個重要原因是「轉到Go是因為他們並未放棄太多的表達能力,但是獲得了性能,並且與並發共舞(RobPike)」。《WhyNotGo?(英文)》對此進行了深入的分析。我可以分享一些我的經驗:有一個Gearman的worker用於處理後端數據。PHP通過其API連接到Gearman的JobServer向worker發起請求。最初worker是使用python編寫的(還有更加原始的版本,PHP的,但是你能想像它工作起來……唉,不說了……)。這個版本有許多的問題(是我們自己的問題,不關Python的事),但是至少它能工作。後來用Golang重寫了這個worker。為此我開發了Golang的GearmanAPI,並使用ZendAPI編寫了一個在Golang中執行PHP腳本的包。然後將它們放在一起:一個可以執行PHP的Gearmanworker。它已經工作了一段時間了,看起來還不錯!哦,受到Yar的啟發,這里還有一個Golang編寫的RPC合並器,用來合並PHP腳本中的RPC調用。現在還是個玩具,不過或許日後能用得著。這其實是將Golang的channel當作消息隊列來用。我在《Golang:有趣的channel應用》中對此有一些說明。世界真美好啊。謝謝Golang!無論如何,大多數PHPer在進行後端開發的時候都會需要學習一些其他語言。如果你正在尋找,或者已經嘗試了一些其他語言。為什麼不來試試Golang?它真得可以讓你的生活更加輕松和快樂。讓你可以有的時間陪伴你的家人和朋友,吃你愛吃的東西,去你想去的地方。貌似我還是沒說清楚啊?好吧,沒關系,在下個月的中國軟體開發者大會上再跟大家就這個話題做一個探討吧。
⑥ 如何查看安卓apk程序的源代碼
將apk文件拷貝至sdcard上。
命令順序如下:
進入Android sdk文件夾/tools目錄下
輸入adb shell
輸入su
輸入cd data
輸入cd app
這時就可以看到你安裝的所有的apk文件。輸入cp 空格 對應的apk 空格 /sdcard/
這樣就將apk文件拷貝出來了。
將apk文件後綴直接變成rar格式,可以看到熟悉的目錄結構了,
其中xml文件打開後都是二進制的,無法查看。
這時就用到了一個android4me的AXMLPrinter2工具。(請自行網路搜索)
輸入以下命令,將xml文件解析出來
java -jar AXMLPrinter2.jar showtimes_list.xml
此命令是在命令行中查看此showtimes_list.xml
將showtimes_list.xml生成xml文件,則輸入以下命令:
java -jar AXMLPrinter2.jar showtimes_list.xml > h.xml
目前進行到這一步,只能看到xml文件的內容,其工程中的java源文件還是看不到,看目錄結構下有一個classes.dex文件,我們需要將dex文件變為jar文件。
這里用到了另一個工具dex2jar。(自行搜索下載)
在Windows下解壓之後的目錄如下圖所示:
在命令行中,進入到此目錄下:
在Windows下,輸入以下命令:
dex2jar.bat c:\classes.dex
運行完之後,在C盤會多一個classes.dex.dex2jar.jar文件,此文件就是我們需要的jar文件。
利用jd-gui,將jar文件反向工程為java代碼。(請自行搜索下載)
它分為Windows、Linux、和max三個版本,這里我下載的是Windows版本的。
解壓之後,雙擊運行exe文件,選擇classes.dex.dex2jar.jar文件,相應的jar文件中的Java文件就被反向工程顯示出來了!
⑦ 如何建立本地Android源代碼鏡像
在ubuntu 10.04 x64系統上。
第一步,安裝git和repo
apt-get install git-core
curl http://android.git.kernel.org/repo > /bin/repo
chmod a+x /bin/repo
第二步,建立git server
建立一個git server發布目錄
mkdir /pub/gittree
安裝伺服器軟體
apt-get install git-daemon-run
查看伺服器運行情況
ps -ef|grep git
看到
119 24126 24124 0 09:36 ? 00:00:00 /usr/lib/git-core/git-daemon --verbose --base-path=/var/cache /var/cache/git
修改伺服器配置
vi /etc/sv/git-daemon/run
相關內容改成下面這樣的
/usr/lib/git-core/git-daemon --verbose --export-all --base-path=/pub/gittree /pub/gittree
重新啟動這個服務,注意,它是由sv - control and manage services monitored by runsv(8)操作的。
sv stop git-daemon
sv start git-daemon
再用ps -ef|grep git查看,改動的配置是否生效。
第三步,鏡像代碼庫到本地目錄,
mkdir /pub/gittree/android-mirror
cd /pub/gittree/android-mirror
repo init -u git://android.git.kernel.org/platform/manifest.git --mirror
第三步,鏡像代碼庫到本地目錄,
mkdir /pub/gittree/android-mirror
cd /pub/gittree/android-mirror
repo init -u git://android.git.kernel.org/platform/manifest.git --mirror
repo sync
要等很長時間,等它下載完成。如果中間有錯誤發生,下載中斷,則要重做repo sync,會續傳。
第四步,從本里代碼庫里取出代碼,
另啟一個終端窗口,
cp /bin/repo /bin/repo-local
vi /bin/repo-local
將裡面的git://.....改成git://127.0.0.1/android-mirror/ 指向本地服務。
mkdir /pub/test
cd /pub/test
repo-local init -u git://127.0.0.1/android-mirror/platform/manifest.git -b froyo 這里以froyo為例下載一個分支版本。注意,這里不用repo。 git url的寫法,可能有變,如在ti公司omap代碼庫里,就不盡相同。
vi .repo/manifests/default.xml
修改其中的fetch="git://127.0.0.1/android-mirror/" 指向本地代碼庫。
repo-local sync ,這里,不用repo。
mirror下來的代碼庫,並不一定會全,會出現某個project找不到的情況,要去補充下載。
回到之前的那個mirror的終端窗口,當前目錄在 /pub/gittree/android-mirror
vi .repo/manifests/default.xml
照著樣子增加一行project,寫上需要的名字,保存退出。
repo sync + project name ,project的名字,就是剛在default.xml里看到的。
再回到test目錄下,繼紐 repo-local sync
發生過,在android-mirror里sync時,報錯,指出manifest里有uncommited change,這時,將.repo目錄刪去,重新repo init...一次,再repo sync,原來下載的代碼還在,有更新的會補充下載
⑧ 100分求 #include"system.h" 文件或者system.h源代碼
/***
*system.c - pass a command line to the shell
*
* Copyright (c) 1985-1997, Microsoft Corporation. All rights reserved.
*
*Purpose:
* defines system() - passes a command to the shell
*
*******************************************************************************/#include <cruntime.h>
#include <process.h>
#include <io.h>
#include <stdlib.h>
#include <errno.h>
#include <tchar.h>
#include <dbgint.h>/***
*int system(command) - send the command line to a shell
*
*Purpose:
* Executes a shell and passes the command line to it.
* If command is NULL, determine if a command processor exists.
* The command processor is described by the environment variable
* COMSPEC. If that environment variable does not exist, try the
* name "cmd.exe" for Windows NT and "command.com" for Windows '95.
*
*Entry:
* char *command - command to pass to the shell (if NULL, just determine
* if command processor exists)
*
*Exit:
* if command != NULL returns status of the shell
* if command == NULL returns non-zero if CP exists, zero if CP doesn't exist
*
*Exceptions:
*
*******************************************************************************/int __cdecl _tsystem (
const _TSCHAR *command
)
{
int catch;
_TSCHAR *argv[4]; argv[0] = _tgetenv(_T("COMSPEC")); /*
* If command == NULL, return true IFF %COMSPEC%
* is set AND the file it points to exists.
*/ if (command == NULL) {
return argv[0] == NULL ? 0 : (!_taccess(argv[0],0));
} _ASSERTE(*command != _T('\0')); argv[1] = _T("/c");
argv[2] = (_TSCHAR *) command;
argv[3] = NULL; /* If there is a COMSPEC defined, try spawning the shell */ if (argv[0]) /* Do not try to spawn the null string */
if ((catch = _tspawnve(_P_WAIT,argv[0],argv,NULL)) != -1
|| (errno != ENOENT && errno != EACCES))
return(catch); /* No COMSPEC so set argv[0] to what COMSPEC should be. */
argv[0] = ( _osver & 0x8000 ) ? _T("command.com") : _T("cmd.exe"); /* Let the _spawnvpe routine do the path search and spawn. */ return(_tspawnvpe(_P_WAIT,argv[0],argv,NULL));
}
⑨ 求任何網路游戲源碼
魔獸世界的