| 
	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]与[.]的内容,则转一般都会出错。(甚者,可能会蹦)
 
 |