随笔分类 - C/C++
C/C++ discussion
摘要:用execvp实现时,运行adb,如果adb 服务没有启动,会启动adb服务,启动adb服务时,pipe返回的管道在读的时候堵塞了。查看了popen的源码,发现popen是用sh -c来执行的,避免了这个问题不知道sh -c做了些什么操作,使得popen可以避免这个问题代码如下: 1 #ifndef...
阅读全文
摘要:手头一个项目,需要编写项目的makefile多目录结构:csource/├── common│ └── sqlite3├── inc│ ├── curl│ ├── lua│ └── Protection├── lib│ ├── arm│ └── linux├── obj├── out│ ├── ar...
阅读全文
摘要:近来一个新的项目需要使用到http。本来用socket来写一个的,后来发现功能实在太简单,有点捉襟见肘。于是改用libcur来做。首先下载libcur的源码,然后配置:1 ./configure --prefix=$HOME/csource/linux/ CFLAGS='-O2 -m32 -fPIC...
阅读全文
摘要:代码如下:打开USB Hub设备之后,返回句柄hHubDevice,然后使用EnumerateHubPorts来枚举Hub的端口。疑问在代码的中文注释中。 1 bool CUsbEnumHub::EnumerateHubPorts(HANDLE hHubDevice, ULONG NumPorts, UsbItem* pRootItem) 2 { 3 ULONG index; 4 BOOL bSuccess; 5 PUSB_NODE_CONNECTION_INFORMATION_EX connectionInfo; 6 ...
阅读全文
摘要:1 class Widget {2 };3 4 Widget w();如上所示代码,并没有声明一个class Widget w。这是声明了一个函数w,返回值是Widget,不接收参数输入。
阅读全文
摘要:这个代码展示了private继承和模版的一个妙用: 1 #include <iostream> 2 #include <memory> 3 4 template<typename T> 5 class Counter { 6 public: 7 Counter() { count++; } 8 Counter(const Counter&) { count++; } 9 ~Counter() { --count; }10 public:11 std::size_t howMany(void) { return count; }12 private:1
阅读全文
摘要:很好的一个示范例子,设计到类设计,模版,继承,封装。麻雀虽小五脏俱全,废话少说,来看代码:主程序: 1 #include <iostream> 2 3 #include "rcstring.h" 4 5 int main(void) 6 { 7 String s("hello"); 8 9 std::cout << s[2] << std::endl;10 11 std::cout << "Hello World!" << std::endl;12 13 return 0;1
阅读全文
摘要:Windows编程,程序传参,参数分析代码本代码主要是将文件类型参数和非文件类型参数分开。 1 typedef std::vector<const TCHAR*> ParamVector; 2 3 void parseCommandLine(TCHAR * commandLine, ParamVector & paramVector) { 4 //params.erase(params.begin()); 5 //remove the first element, since that is the path of the executable (GetCommand...
阅读全文
摘要:4.2 Item M6:自增(increment)、自减(decrement)操作符前缀形式与后缀形式的区别不论是 increment 或 decrement 的前缀还是后缀都只有一个参数。为了解决这个语言问题,C++规定后缀形式有一个 int 类型参数,当函数被调用时,编译器传递一个 0 做为 int 参数的值给该函数 1 #include <iostream> 2 3 class UInt{ 4 public: 5 explicit UInt(int i = 0) : m_int(i) { } 6 ~UInt() { } 7 UInt(const U...
阅读全文
摘要:More Effective C++的笔记4.1 Item M5:谨慎定义类型转换函数 1 #include <iostream> 2 3 4 class Rational { 5 public: 6 explicit Rational(int numerator = 0, int denominator = 1); 7 //拷贝构造函数不需要explicit修饰,否则需要再定义一个 8 //非const构造参数的构造函数,此处允许的非const转const是无害转换 9 Rational(const Rational &);10 ~Rational...
阅读全文
摘要:Effective C++的笔记 1 #include <tr1/memory> 2 #include <iostream> 3 4 class NewHandlerHolder { 5 public: 6 explicit NewHandlerHolder(std::new_handler nh) 7 :handler(nh){ } 8 ~NewHandlerHolder() { std::set_new_handler(handler); } 9 private:10 std::new_handler handler;11 NewHandl...
阅读全文
摘要:很有意思的两种实现。第一种,是程序运行时递归求和1 int Sum(int n)2 {3 int tmp = 0;4 (!!n) && (tmp = Sum(n-1));5 6 return tmp + n;7 }第二种,程序编译时递归编译求和 1 template <int n> 2 class CalNum { 3 public: 4 enum Value { 5 N = CalNum<n-1>::N + n, 6 }; 7 }; 8 9 template<>10 class CalNum<1> {11 public:12 .
阅读全文
摘要:首先新建一个线程,这个线程负责监控设备的插入拔出线程入口函数: 1 int DeviceThreadEntryForMac(ClassProcMan *pProcMan) 2 { 3 if(pProcMan == NULL) { 4 fprintf(stderr, "DeviceThreadEntryForMac called NULL pointer\n"); 5 return __LINE__; 6 } 7 mach_port_t masterPort; 8 CFMutableDictionary...
阅读全文
摘要:看了Apple上的资料(真是又多又臭,组织真烂,还是E文的),说是针对不同的pid和vid的composite usb设备,只需要写一个codeless驱动就可以提供对该设备的访问。但是本人对Mac开发不熟,更不用说是驱动开发了。捣鼓好久没整出个能用的驱动,虽然说是codeless驱动。船到桥头自然直吧,看资料时发现,既然是composite usb设备,又说是codeless驱动,也就是说,即使不用驱动,直接就可以通过MACH的api来访问指定vid和pid的设备了吧,最后整出这个类,目前测试未发现问题。 1 // 2 // MyUSBDevice.h 3 // 4 // 5 /...
阅读全文
摘要:之前一直用fread和fwrite,但是一直没有认真看过manual page。这次看apue才发现,自己之前有个误解。std io 操作size_t fwrite(const void *BUF, size_t SIZE, size_t COUNT, FILE *FP); If `fwrite' succeeds in writing all the elements you specify, the result is the same as the argument COUNT. In any event, the ...
阅读全文
摘要:经过一段时间的debug和修改,现在的接口趋近于完善了,把代码贴上来共享用法:1.声明一个按钮变量CRgnButton m_BtnBall;2.在父窗口初始化函数中加入如下代码:m_BtnBall.SubclassDlgItem(IDC_BALL, this);m_BtnBall.SetSkin(IDB_BALL_NORMAL, IDB_BALL_DOWN, IDB_BALL_FOCUS);m_BtnBall.SetToolTipText(_T("Ball"));这样就可以将对象m_BtnBall和对话框上的按钮关联起来。按钮最少需要3张图片:普通显示,按下去显示,焦点显示
阅读全文
摘要:使用前一篇文章Win32创建后台进程的方法创建adb后台服务进程,下面给出adb 2.6 升级至2.9 版本 for visual studio的代码。编译参数为:WIN32_DEBUG_CONSOLEHAVE_WINSOCKADB_HOSTHAVE_WIN32_PROC_WINSOCKAPI_HAVE_WIN32_IPC_XOPEN_SOURCE_GNU_SOURCE编译所需额外库为:kernel32.libuser32.libgdi32.libwinspool.libcomdlg32.libadvapi32.libshell32.libole32.liboleaut32.libuuid.l
阅读全文
摘要:创建后台进程之前先判断进程时候有在运行,如果有,则直接返回,否则创建。创建后台进程,放进单独线程里面做比较好,然后在其他线程可以同时做一些初始化或者其他的工作,当然这些工作必须和后台没有联系,和后台有联系的必须放在后台创建完成之后。本例子以创建adb后台server为例做的。废话不多少,代码如下: 1 #include <Tlhelp32.h> 2 3 #define DEAMON_FILE _T("adb.exe") 4 BOOL IsProcessIsRun(LPCTSTR lpProcessName); 5 6 BOOL IsProcessIsRun(LP
阅读全文
摘要:工作中碰到需要处理超过2GB的文件,考虑到还要跨平台封装C库函数成一个类,提供常见的一般IO操作 1 //Header File 2 #ifndef __LARGE_FILE_H 3 #define __LARGE_FILE_H 4 5 //This Marco forces all file access calls to use the 64 bit variants 6 #define FILE_OFFSET_BITS 64 7 8 #include <cstdio> 9 #include <string> 10 11 class CLargeFile { 12.
阅读全文
摘要:windows平台自带ini解析的接口,但是如果要跨平台的话,就要自己来实现一个,网上找了下,发现在跨平台不够理想遂自己修改了一个出来。支持解析utf-8, unicode big endian, unicode little endian格式文件,请勿使用windows的ansi保存的文件测试。文件操作时,空格和注释会被丢弃,可能下次有空考虑加上来吧。代码如下: 1 //head file 2 3 #ifndef IniParser_ 4 #define IniParser_ 5 6 #include <vector> 7 #include <string> 8 #i
阅读全文
浙公网安备 33010602011771号