2015年3月18日
#
原文轉載自:http://www.uml.org.cn/c++/200902104.asp
一篇講解宏預編譯的內容。
2015年1月20日
#
轉自:http://c.biancheng.net/cpp/html/326.html
相關函數:fstat, lstat, chmod, chown, readlink, utime
頭文件:#include <sys/stat.h> #include <unistd.h>
定義函數:int stat(const char * file_name, struct stat *buf);
函數說明:stat()用來將參數file_name 所指的文件狀態, 復制到參數buf 所指的結構中。
下面是struct stat 內各參數的說明: struct stat { dev_t st_dev; //device 文件的設備編號 ino_t st_ino; //inode 文件的i-node mode_t st_mode; //protection 文件的類型和存取的權限 nlink_t st_nlink; //number of hard links 連到該文件的硬連接數目, 剛建立的文件值為1. uid_t st_uid; //user ID of owner 文件所有者的用戶識別碼 gid_t st_gid; //group ID of owner 文件所有者的組識別碼 dev_t st_rdev; //device type 若此文件為裝置設備文件, 則為其設備編號 off_t st_size; //total size, in bytes 文件大小, 以字節計算 unsigned long st_blksize; //blocksize for filesystem I/O 文件系統的I/O 緩沖區大小. unsigned long st_blocks; //number of blocks allocated 占用文件區塊的個數, 每一區塊大小為512 個字節. time_t st_atime; //time of lastaccess 文件最近一次被存取或被執行的時間, 一般只有在用mknod、utime、read、write 與tructate 時改變. time_t st_mtime; //time of last modification 文件最后一次被修改的時間, 一般只有在用mknod、utime 和write 時才會改變 time_t st_ctime; //time of last change i-node 最近一次被更改的時間, 此參數會在文件所有者、組、權限被更改時更新 };
先前所描述的st_mode 則定義了下列數種情況: 1、S_IFMT 0170000 文件類型的位遮罩 2、S_IFSOCK 0140000 scoket 3、S_IFLNK 0120000 符號連接 4、S_IFREG 0100000 一般文件 5、S_IFBLK 0060000 區塊裝置 6、S_IFDIR 0040000 目錄 7、S_IFCHR 0020000 字符裝置 8、S_IFIFO 0010000 先進先出 9、S_ISUID 04000 文件的 (set user-id on execution)位 10、S_ISGID 02000 文件的 (set group-id on execution)位 11、S_ISVTX 01000 文件的sticky 位 12、S_IRUSR (S_IREAD) 00400 文件所有者具可讀取權限 13、S_IWUSR (S_IWRITE)00200 文件所有者具可寫入權限 14、S_IXUSR (S_IEXEC) 00100 文件所有者具可執行權限 15、S_IRGRP 00040 用戶組具可讀取權限 16、S_IWGRP 00020 用戶組具可寫入權限 17、S_IXGRP 00010 用戶組具可執行權限 18、S_IROTH 00004 其他用戶具可讀取權限 19、S_IWOTH 00002 其他用戶具可寫入權限 20、S_IXOTH 00001 其他用戶具可執行權限上述的文件類型在 POSIX 中定義了檢查這些類型的宏定義 21、S_ISLNK (st_mode) 判斷是否為符號連接 22、S_ISREG (st_mode) 是否為一般文件 23、S_ISDIR (st_mode) 是否為目錄 24、S_ISCHR (st_mode) 是否為字符裝置文件 25、S_ISBLK (s3e) 是否為先進先出 26、S_ISSOCK (st_mode) 是否為socket 若一目錄具有sticky 位 (S_ISVTX), 則表示在此目錄下的文件只能被該文件所有者、此目錄所有者或root 來刪除或改名.
返回值:執行成功則返回0,失敗返回-1,錯誤代碼存于errno。
錯誤代碼: 1、ENOENT 參數file_name 指定的文件不存在 2、ENOTDIR 路徑中的目錄存在但卻非真正的目錄 3、ELOOP 欲打開的文件有過多符號連接問題, 上限為16 符號連接 4、EFAULT 參數buf 為無效指針, 指向無法存在的內存空間 5、EACCESS 存取文件時被拒絕 6、ENOMEM 核心內存不足 7、ENAMETOOLONG 參數file_name 的路徑名稱太長
范例 #include <sys/stat.h> #include <unistd.h> main() { struct stat buf; stat("/etc/passwd", &buf); printf("/etc/passwd file size = %d \n", buf.st_size); }
執行: /etc/passwd file size = 705
2014年11月14日
#
摘要: 原文轉載自:http://blog.csdn.net/callbackfunc/article/details/7233894
本例通過新建一個MFC規則DLL并新建一個MFC對話框程序調用它,演示MFC規則DLL的創建及調用。(VS2010環境下實例代碼親測可編譯通過)
一、MFC規則DLL項目
1.創建MFC規則DLL
2.新建global.cpp(新建此文件沒有特殊意義,僅用... 閱讀全文
2014年11月13日
#
1 void CLogService::kkLog2(const char* pszName, const char* fmt, ) { 2 cocos2d::CCFileUtils *pCCFileUtils = cocos2d::CCFileUtils::sharedFileUtils(); 3 #if defined(WIN32) || defined(_WIN32) 4 SSString path = getExePath().c_str(); 5 path += "log/"; 6 #elif defined(IOS) || defined(__APPLE__) 7 SSString path = pCCFileUtils->getWritablePath(); 8 path += "log/"; 9 #else 10 SSString path = "/mnt/sdcard/external-sd/"; 11 #endif 12 13 SSString filename = path + pszName; 14 15 va_list ap; 16 va_start(ap, fmt); 17 char buf[1024]; 18 vsprintf(buf, fmt, ap); 19 va_end(ap); 20 21 std::string strTime; 22 ___getTime(strTime); 23 strTime += " "; 24 25 #if defined(_WIN32) || defined(WIN32) 26 std::string strLogText = strTime + buf + "\r\n"; 27 ::OutputDebugStringA((LPCSTR)strLogText.c_str()); 28 #endif 29 30 // ensure the path is exist 31 _create_dir(path.c_str()); 32 33 FILE *fp = fopen(filename.c_str(), "ab+"); 34 if(fp) { 35 fwrite(strTime.c_str(), strTime.length(), 1, fp); 36 fwrite(buf, strlen(buf), 1, fp); 37 fputs("\r\n", fp); 38 fclose(fp); 39 } 40 }
1 void CShopData::generateWebDataSaveFileName(std::string &strFileName) { 2 3 CCFileUtils *pCCFileUtils = CCFileUtils::sharedFileUtils(); 4 #if defined(WIN32) || defined(_WIN32) 5 SSString path = ""; 6 #elif defined(IOS) || defined(__APPLE__) 7 SSString path = pCCFileUtils->getWritablePath(); 8 //path += "log/"; 9 #else 10 SSString path = "/mnt/sdcard/external-sd/"; 11 #endif 12 13 strFileName = path.c_str(); 14 strFileName += g_pcszWebDataSaveFile; 15 16 CWebUrlConfig *pUrlCfg = CWebUrlConfigInstance::singleton(); 17 std::string strGameId = pUrlCfg->getWebUrlAddress("gameid"); 18 strFileName = strFileName + strGameId + ".json"; 19 20 21 // strFileName = g_pcszWebDataSaveFile; 22 // CWebUrlConfig *pUrlCfg = CWebUrlConfigInstance::singleton(); 23 // std::string strGameId = pUrlCfg->getWebUrlAddress("gameid"); 24 // strFileName = strFileName + strGameId + ".json"; 25 }
2014年10月21日
#
摘要: 直接上代碼
Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> 1 #include "stdafx.h" 2 #include <fstream>&nbs... 閱讀全文
2014年9月19日
#
2014年9月18日
#
原文轉載自:https://software.intel.com/zh-cn/blogs/2013/12/17/android-android-sdk-manager
在跟燕青一起學Android應用開發(一):安裝Android開發環境一文中,筆者簡單的介紹了如何安裝Android開發環境。將安裝環境搭建好之后,我們需要配置Android SDK Manager,本篇博客將著重解說如何配置Android SDK Manager。
Android SDK Manager是Eclipse的一個重要配置,在安裝目錄下打開eclipse/eclipse.exe執行文件,選擇“Windows”菜單下的子菜單項“Android SDK Manager”,如圖1所示。

圖1
在Android SDK Manager中,Android SDK Tools, Android SDK Platform-tools和Android SDK Platform是必須要安裝的,如圖2所示,其他的項目可以自選。

圖2
在本篇博客中,Android4.4(API19)做為安裝項目,讀者選擇它,點擊右下角的安裝按鈕可以開始安裝。
在安裝的時候,我們可能會遇到一個錯誤,類似信息是: ” Missing SDK platform Android, API 19”,筆者折騰很很久才發現,這個主要的原因是ADT太老。什么?!在跟燕青一起學Android應用開發(一):安裝Android開發環境一文中,筆者不是下載了最新的ADT,怎么可能太老呢?!沒錯,筆者也為此思考了半天,后來發現雖然ADT是最新的,但是里面的部分內容還是陳舊的。那么如何搞定呢?
不急,很簡單,只要升級一下eclipse就可以了,如圖3所示。打開“Help“菜單中的“Check for Updates”子菜單,耐心等待一下吧。

圖3
Content.jar包會在耐心的等待中被升級完畢,現在在試試看能否安裝了?
哈哈哈,估計某人一臉的微笑了吧J
對于其他包的安裝,只要在Android SDK Manager中選中它們,點擊右下角的安裝按鈕,你就可以泡杯咖啡,翹起二郎腿慢慢享受一段快樂時光了J。
2014年3月31日
#
文章轉載自:http://blog.csdn.net/antoinette/article/details/2112671 導讀: 聲明導出函數: DLL內的函數分兩種:只在DLL內部調用的、DLL導出函數——供應用程序調用 聲明導出函數兩種方法: (1)在函數聲明中加上extern"C" int _declspec(dllexport)add(int x,int y);//一定要加上extern "C" (2)采用模塊定義(.def)文件聲明。.def文件為鏈接器提供了有關被鏈接程序的導出、屬性和其他信息。 MFC AppWizard為MFC DLL創建一個.def文件,而Win32 DLL,用戶必須自己創建.def文件。 .def定義示例代碼如下: dll.def:導出DLL函數 LIBRARY dllTest DESCRIPTION "math" EXPORTS GlobleVar DATA add @1 sub @2 .def文件的規則為: (1)LIBRARY語句指出DLL的名字 (2)EXPORTS語句后列出一系列函數名稱。可以在導出函數后加@n,表示函數序號。 (3);表示注釋,且注釋不能和語句共享一行。 (4)可選部分——DESCRIPTION語句,原來描述DLL的用途。 (5)變量名 DATA:導出全局變量 DLL的調用(加載)方式: (1)動態調用(顯式鏈接) LoadLibrary() GetProcAddress() FreeLibrary() (2)靜態調用(隱式鏈接) 由編譯系統完成對DLL的加載和應用程序結束時對DLL的卸載。需要做兩個工作: a:將編譯dll工程所得的.lib和.dll文件放入調用dll工程所在的路徑。 包含.lib文件:#pragma comment(lib,"dllTest.lib") or project->setting->link->... b:聲明導入函數,extern "C" int _declspec(dllimport) add(int x,int y)中的_declspec(dllimport)//must add extern "C" Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1881088 本文轉自 http://blog.csdn.net/blueshelly/archive/2007/11/12/1881088.aspx
2014年3月28日
#
眾所周知,用stringstream實現數值型與string進行互轉是十分方便的。 但它不是萬能的。有著許多限制。下面就列出幾點讓人比較郁悶的,也是問題比較大條的坑,大伙需警惕。 坑 1: 如果待轉換的數值型為整型,且值為0時,則轉換出來的字符串去并不是:"0"。 調試跟蹤后,發現最終結果是一個,類似:""(即:空字符串),卻并非空字符串的東西。 亦不是:"\0"或"\n"或" ",到現在本人仍不清楚結果是什么東東。
坑 2: 對于十六進制,無法正常轉換。
坑 3: 對于待轉換的內容中,含有非[0..9]與[.]的內容,則轉一般都會出錯。(甚者,可能會蹦)
|