几个Windows到Linux的代码移植问题
发布:smiling 来源: PHP粉丝网 添加日期:2014-03-06 22:11:38 浏览: 评论:0
1、在Linux实现Win32 API之GetTickCount函数
为了将Windows中的GetTickCount API函数移植到Linux,可以使用如下的代码:
- long GetTickCount()
- {
- tms tm;
- return times(&tm);
- }
2、Windows和Linux系统关于itoa的移植问题
大家知道,在将Windows的STL代码移植到Linux系统时,由于Linux系统中STL没有实现默认的itoa函数,因此itoa在Linux中无法正常工作。要是在GCC命令行禁用STL的话,那么代码里就无法使用STL,从而丢失可移植性。这里给出一个简单可行的解决方法,以便你碰到这种情况时顺利进行从Windows到Linux的移植:
- #if defined(__linux__)
- #define _itoa itoa
- char* itoa(int value, char* str, int radix)
- {
- int rem = 0;
- int pos = 0;
- char ch = ''!'' ;
- do
- {
- rem = value % radix ;
- value /= radix;
- if ( 16 == radix )
- {
- if( rem >= 10 && rem <= 15 )
- {
- switch( rem )
- {
- case 10:
- ch = ''a'' ;
- break;
- case 11:
- ch =''b'' ;
- break;
- case 12:
- ch = ''c'' ;
- break;
- case 13:
- ch =''d'' ;
- break;
- case 14:
- ch = ''e'' ;
- break;
- case 15:
- ch =''f'' ;
- break;
- }
- }
- }
- if( ''!'' == ch )
- {
- str[pos++] = (char) ( rem + 0x30 );
- }
- else
- {
- str[pos++] = ch ;
- }
- }while( value != 0 );
- str[pos] = '''' ;
- return strrev(str);
- }
- #endif
3、Windows到Linux关于__strrev的移植问题
因为在Linux系统中没有__strrev函数,那么将Windows代码移植到Linux系统时会有问题,本文下面描述一个技巧,在Linux中提供一个替代__strrev函数的方法。这里提供两个单独的实现:一个是普通的char* C函数使用的__strrev标准实现,另一个是针对STL的实现。两者的输入和输出仍然都是char*。
- //
- // strrev 标准版
- //
- #if !defined(__linux__)
- #define __strrev strrev
- #endif
- char* strrev(char* szT)
- {
- if ( !szT ) // 处理传入的空串.
- return "";
- int i = strlen(szT);
- int t = !(i%2)? 1 : 0; // 检查串长度.
- for(int j = i-1 , k = 0 ; j > (i/2 -t) ; j-- )
- {
- char ch = szT[j];
- szT[j] = szT[k];
- szT[k++] = ch;
- }
- return szT;
- }
- //
- // strrev 针对 STL 的版本.
- //
- char* strrev(char* szT)
- {
- string s(szT);
- reverse(s.begin(), s.end());
- strncpy(szT, s.c_str(), s.size());
- szT[s.size()+1] = '''';
- return szT;
4、实现Sleep函数从Windows到Linux的移植
假设你有一些在Windows环境编写的代码,你想让它们在Linux环境下运行,条件是要保持对原有API署名的调用。比如在Windows中有Sleep,而在Linux中对应的函数是usleep,那么如何保持原有的函数名称调用呢?下面给出一段代码例子:
- void Sleep(unsigned int useconds )
- {
- // 1 毫秒(milisecond) = 1000 微秒 (microsecond).
- // Windows 的 Sleep 使用毫秒(miliseconds)
- // Linux 的 usleep 使用微秒(microsecond)
- // 由于原来的代码是在 Windows 中使用的,所以参数要有一个毫秒到微秒的转换。
- usleep( useconds * 1000 );
- }
Tags: Windows Linux 代码移植
- 上一篇:新手学堂:类Linux中各种各样的编程语言
- 下一篇:Linux系统共享库编程
相关文章
- ·Linux开发工具和Windows开发工具对比(2013-11-11)
- ·对比:Linux和Windows系统线程间的区别(2014-03-08)
- ·新手学堂:Windows与Linux系统下的库介绍(2014-03-08)
- ·玩转WindowsXP 访问Linux下的共享文件(2014-03-08)
- ·Mac os的压缩zip文件在windows系统下打开中文文件名乱码(2015-04-28)
- ·举例分析Linux动态库和静态库(2013-11-11)
- ·用C++语言做Linux开发工具的一些心得(2013-11-11)
- ·用C++语言做Linux开发工具之粘合剂Makefile(2013-11-11)
- ·用C++语言做Linux开发工具之编译器和调试器选择要素(2013-11-11)
- ·用C++语言做Linux开发工具之编辑器选择要素(2013-11-11)
- ·Linux编程工具C编译器和C编程工具GDB执行步骤(2013-11-11)
- ·Linux编程工具C编译器和C编程工具介绍(1)(2013-11-11)
- ·Linux系统下完成Windows的开发环境替换(2013-11-14)
- ·Linux 开发工具推荐(2013-11-14)
- ·Linux 内存监控内存泄露和回收内存的方法(2013-11-14)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)