易截截图软件、单文件、免安装、纯绿色、仅160KB

Linux下GetModuleFileName的四种写法

Linux下GetModuleFileName的四种写法
  问题的起因是要把一个东东从Windows移植到基于Linux的嵌入式系统上。移植过程中,遇到了GetModuleFileName的问
题。为了解决这个问题,花了不少的时间,也走了不少弯路。下面是整理的结果。
  首先摘录一段文字,来源《UNIX Programming FAQ 中文版》
 
1.14. 我怎样找到进程的相应可执行文件?
  这个问题可以作为'常见未回答问题
'('Frequently Unanswered Questions')的一个好候选,因为事实上提出这个问题经常意味着程序的设计有缺陷。:)
 
 你能作的'最佳猜测'('best
guess')是通过审视'argv[0]'的值而获得。如果它包括一个'/',那么它可能是可执行程序的绝对或相对(对于在程序开始时的当前目录而言)
路径。如果不包括,那么你可以仿效shell对于'PATH'变量的查询来查找这个程序。但是,不能保证成功,因为有可能执行程序时'argv[0]'是
一些任意值,也不排除这个可执行文件在执行后可能已经被更名或删除的情况。
  如果所有你想做的只是能打印一个和错误消息一起出现的合适的名
字,那么最好的方法在'main()'函数中将'argv[0]'的值保存在全局变量中以供整个程序使用。虽然没有保证说'argv[0]'的值总是有意
义,但在大多数情况下它是最好的选择。
  人们询问这个问题的最普通原因是意图定位他们程序的配置文件。这被认为是不好的形式;包含可执行文件
的目录应当*只*包含可执行文件,而且基于管理的要求经常试图将配置文件放置在和可执行文件不同的文件系统。
  试图做这个的一个比较不普通但
更正规的理由是允许程序调用'exec()'执行它自己;这是一种用来完全重新初始化进程(比如被用于一些'sendmail'的版本)的办法(比如当一
个守护程序捕获一个'SIGHUP'信号)。
  完全同意上面的观点!所以并不建议在Linux下去实现GetModuleFileName,不过出于技术的角度,讨论一下这个问题也是可以
的。
 
  好,下面说说茴字的四种写法。哦,不,是GetModuleFileName的四种写法。
GetModuleFileName的四种写法

法一:从PATH入手
说明:上文提供的思路
int GetModuleFileName1( char*
sModuleName, char* sFileName, int nSize)
{
 int ret = -1;
 if(
strchr( sModuleName,'/' ) != NULL )
  strcpy( sFileName, sModuleName
);
 else
 {
  char* sPath = getenv("PATH");
 &nb


相关文档:

linux内核编译中的i2o选项

The Intelligent Input/Output (I2O) architecture allows hardware drivers to be split into two parts: an operating system specific module called the OSM and an hardware specific module called the HDM. The OSM can talk to a whole range of HDM's, and ideally the HDM's are not OS dependent. This allows f ......

Linux Shell 笔记一

最近在学习linux,在这里给大家推荐一个网站http://linux.vbird.org/ 上面关于linux的教程写得很好,也避免了我在学习过程中的很多弯路。
程序一:HelloWord,在屏幕输出HelloWord
利用vim 创建一个sh01.sh文件
echo -e "Hello World!\a\n"
exit 0

程序二:将输入参数拼接后输出
read -p "First Name:" firstn ......

Linux 的字符串截取

Linux 的字符串截取很有用。有八种方法。
假设有变量 var=http://www.hao.com/123.htm
一 # 号截取,删除左边字符,保留右边字符。
echo ${var#*//}
其中 var 是变量名,# 号是运算符,*// 表示从左边开始删除第一个 // 号及左边的所有字符
即删除 http://
结果是 :www.hao.com/123.htm
二 ## 号截取,删除左边字符 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号