#
原文转载自:http://www.uml.org.cn/c++/200902104.asp
一篇讲解宏预编译的内容。
转自: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
摘要: 原文转载自:http://blog.csdn.net/callbackfunc/article/details/7233894
本例通过新建一个MFC规则DLL并新建一个MFC对话框程序调用它,演示MFC规则DLL的创建及调用。(VS2010环境下实例代码亲测可编译通过)
一、MFC规则DLL项目
1.创建MFC规则DLL
2.新建global.cpp(新建此文件没有特殊意义,仅用... 阅读全文
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 }
摘要: 直接上代码
Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> 1 #include "stdafx.h" 2 #include <fstream>&nbs... 阅读全文
原文转载自: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。
文章转载自: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
众所周知,用stringstream实现数值型与string进行互转是十分方便的。 但它不是万能的。有着许多限制。下面就列出几点让人比较郁闷的,也是问题比较大条的坑,大伙需警惕。 坑 1: 如果待转换的数值型为整型,且值为0时,则转换出来的字符串去并不是:"0"。 调试跟踪后,发现最终结果是一个,类似:""(即:空字符串),却并非空字符串的东西。 亦不是:"\0"或"\n"或" ",到现在本人仍不清楚结果是什么东东。
坑 2: 对于十六进制,无法正常转换。
坑 3: 对于待转换的内容中,含有非[0..9]与[.]的内容,则转一般都会出错。(甚者,可能会蹦)
|