﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-牵牛散步-随笔分类-C++学习资料</title><link>http://www.cppblog.com/klsmlzm/category/577.html</link><description>暂时无</description><language>zh-cn</language><lastBuildDate>Wed, 21 May 2008 08:36:42 GMT</lastBuildDate><pubDate>Wed, 21 May 2008 08:36:42 GMT</pubDate><ttl>60</ttl><item><title>CVS服务器的相关配置及使用[ Server of CVS Configure and Usage for linux]---注,此教程是"火山哥"提供的:-)</title><link>http://www.cppblog.com/klsmlzm/archive/2006/11/28/15737.html</link><dc:creator>牵牛散步</dc:creator><author>牵牛散步</author><pubDate>Tue, 28 Nov 2006 08:18:00 GMT</pubDate><guid>http://www.cppblog.com/klsmlzm/archive/2006/11/28/15737.html</guid><wfw:comment>http://www.cppblog.com/klsmlzm/comments/15737.html</wfw:comment><comments>http://www.cppblog.com/klsmlzm/archive/2006/11/28/15737.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/klsmlzm/comments/commentRss/15737.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/klsmlzm/services/trackbacks/15737.html</trackback:ping><description><![CDATA[
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-outline-level: 1">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">一、安装</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">1</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span>
				<span lang="EN-US">linux</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">安装好后已经装好了</span>
				<span lang="EN-US">cvs</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，可用</span>
				<span lang="EN-US">rpm -qa|grep cvs</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">查看。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如果没有安装你可以在</span>
				<span lang="EN-US">Redhat </span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">第</span>
				<span lang="EN-US">2</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">张光盘上找到，另外你也可以在网上下载到最新的</span>
				<span lang="EN-US">rpm</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">包。很容易找，其实不存在什么</span>
				<span lang="EN-US">linux</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">版本。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?>
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">2</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、创建</span>
				<span lang="EN-US">cvs</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">使用的目录：</span>
				<span lang="EN-US">mkdir /home/mycvstest</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">3</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、创建</span>
				<span lang="EN-US">cvs</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">使用的用户和组</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">groupadd cvs </span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">useradd -g cvs -G cvs –d /home/mycvstest cvs</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">passwd cvs</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-outline-level: 1">
				<span lang="EN-US">4</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、修改</span>
				<span lang="EN-US">mycvstest</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的用户：</span>
				<span lang="EN-US">chown -R cvs:cvs /home/mycvstest</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-outline-level: 1">
				<span lang="EN-US">
						<span style="mso-spacerun: yes">                        </span>chmod 755 /home/mycvstest</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">5</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、切换用户：</span>
				<span lang="EN-US">su cvs</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">6</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、创建源码仓库：</span>
				<span lang="EN-US">mkdir /home/mycvstest/drcls drclgw</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">7</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、初始化源码仓库：</span>
				<span lang="EN-US">cvs -d /home/mycvstest/drcls init</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes">                   </span>cvs -d /home/mycvstest/drclgw init</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes">                </span>
						<span style="mso-spacerun: yes">   </span>chmod 755 /home/mycvstest/drcls drclgw</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="COLOR: red; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">初始化后可以在目录下见到新增加的</span>
				<span lang="EN-US" style="COLOR: red">CVSROOT</span>
				<span style="COLOR: red; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">目录，</span>
				<span lang="EN-US" style="COLOR: red">cvs</span>
				<span style="COLOR: red; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">所有的控制信息都在这个目录里。</span>
				<span lang="EN-US" style="COLOR: red">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">8</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、退回到</span>
				<span lang="EN-US">root</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">用户，建立</span>
				<span lang="EN-US">CVS</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">服务启动文件，</span>
				<span lang="EN-US">CVS</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">使用</span>
				<span lang="EN-US">xinetd</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">方式启动。</span>
				<span lang="EN-US">
						<span style="mso-spacerun: yes">  </span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">vi /etc/xinetd.d/cvspserver</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">service cvspserver </span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">{ </span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US">disable = no </span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US">flags = REUSE </span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US">socket_type = stream </span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US">wait = no </span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US">user = root </span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US">server= /usr/bin/cvs </span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="COLOR: red">server_args= -f --allow-root=/home/mycvstest/drcls<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="COLOR: red">--allow-root=/home/mycvstest/drclgw pserver <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US">log_on_failure += USERID </span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">}</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">注：红色的参数很重要，由于</span>
				<span lang="EN-US">xinetd</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span>
				<span lang="EN-US">server_args</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">长度限制</span>
				<span lang="EN-US">,</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">当你想运行很多的单个仓库的时候</span>
				<span lang="EN-US">(</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">就是有很多个模块时，比如</span>
				<span lang="EN-US">drcrgw),</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">但在</span>
				<span lang="EN-US" style="COLOR: red">server_args</span>
				<span style="COLOR: red; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中无法输入这么多单个的仓库，</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">可以采取以下方式解决（现在实验室</span>
				<span lang="EN-US">90</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">上就用的这种方式）：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">#&gt; vi cvspserver </span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">service cvspserver </span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">{ </span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes">        </span>disable = no</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes">        </span>socket_type = stream </span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes">        </span>wait = no </span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes">        </span>user = root </span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes">        </span>server = /usr/bin/cvs.run</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes">        </span>server_args =""</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">}</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">编写</span>
				<span lang="EN-US">cvs.run</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">脚本</span>
				<span lang="EN-US">
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">vi /cvsroot/cvs.run </span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">#!/bin/bash </span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">/usr/bin/cvs -f </span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">--allow-root=/home/mycvstest/drcls</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">--allow-root= /home/mycvstest/drclgw</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">pserver</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">chmod a+x cvs.run</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">9</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、加入</span>
				<span lang="EN-US">cvs</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">服务：</span>
				<span lang="EN-US">
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">#&gt;vi /etc/services </span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">cvspserver 2401/tcp #pserver cvs service </span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">cvspserver 2401/udp #pserver cvs service </span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">10</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、启动</span>
				<span lang="EN-US">cvs</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">服务：</span>
				<span lang="EN-US">
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">#&gt; service xinetd restart </span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">11</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、检查</span>
				<span lang="EN-US">cvspserver</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">服务是否已经启动：</span>
				<span lang="EN-US">
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">#&gt; netstat -l |grep cvspserver </span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">应该有如下结果：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">tcp 0 0 *:cvspserver *:* LISTEN</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes">
						</span>
				</span> </p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-outline-level: 1">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">二、使用和管理</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">1</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、创建</span>
				<span lang="EN-US">cvs</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">用户：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">cd /home/mycvstest/drcls/CVSROOT</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">htpasswd –c passwd zhangcan <span style="COLOR: red">(htpasswd</span></span>
				<span style="COLOR: red; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">命令要安装</span>
				<span lang="EN-US" style="COLOR: red">apache</span>
				<span style="COLOR: red; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">后才有，此命令创建一个</span>
				<span lang="EN-US" style="COLOR: red">passwd</span>
				<span style="COLOR: red; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件，里面内容为新建</span>
				<span lang="EN-US" style="COLOR: red">cvs</span>
				<span style="COLOR: red; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">用户的用户名和密码</span>
				<span lang="EN-US" style="COLOR: red">)<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">vi passwd <span style="COLOR: red">(</span></span>
				<span style="COLOR: red; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在新建的用户后手工加入用户属于的组</span>
				<span lang="EN-US" style="COLOR: red">cvs)</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="COLOR: red; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">例如：</span>
				<span lang="EN-US">zhangcan:<span style="COLOR: #3366ff">dgeagasdgasdr</span><span style="COLOR: red">:cvs<span style="mso-spacerun: yes">  </span></span></span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">蓝色字符串表示加密后的密码。</span>
				<span lang="EN-US" style="COLOR: red">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">2</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、赋予用户读写权限</span>
				<span lang="EN-US" style="COLOR: red">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">手工在</span>
				<span lang="EN-US">CVSROOT</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">目录中建立</span>
				<span lang="EN-US">readers</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</span>
				<span lang="EN-US">writers</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件。</span>
				<span lang="EN-US">Readers</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件中的用户只有读权限，</span>
				<span lang="EN-US">writers</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中的用户具有读写权限，一行只写一个用户名。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">3</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、登录</span>
				<span lang="EN-US">cvs</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在客户机</span>
				<span lang="EN-US">Linux</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下面用命令：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">export CVSROOT=:pserver:zhangcan@192.168.100.197:/home/mycvstest/drcls</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">cvs login</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">4</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、向源码仓库中导入源码</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">首先进入你本机上安装源码的目录，然后使用以下命令：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">cvs import –m “this is my soure code” drcls NISEC test start</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">-m </span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">表示在</span>
				<span lang="EN-US">cvs</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">历史文件显示的消息，</span>
				<span lang="EN-US">drclst</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">为你指定的源码目录名，</span>
				<span lang="EN-US">NISEC</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">为供应商标签，</span>
				<span lang="EN-US">test</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">为发行标签（这两项可以不要），</span>
				<span lang="EN-US">start</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">必须要。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">5</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span>
				<span lang="EN-US">checkout</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">出需要修改的源代码</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">cvs co drcls<span style="mso-spacerun: yes">  </span></span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在你的当前目录下会发现多了一个</span>
				<span lang="EN-US">drcls</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">目录，要修改的源码都在里面</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: red">co</span>
				<span style="COLOR: red; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">为</span>
				<span lang="EN-US" style="COLOR: red">checkout</span>
				<span style="COLOR: red; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的简写</span>
				<span lang="EN-US" style="COLOR: red">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">6</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、提交修改</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">假设刚才对</span>
				<span lang="EN-US">readme</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件进行了修改，现在提交</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">cvs commit –m “modify a few of wrong words”<span style="mso-spacerun: yes">  </span>readme</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">命令执行后会提示版本已经改为</span>
				<span lang="EN-US">1.2</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">7</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span>
				<span lang="EN-US">checkout</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">出以前的版本</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如果想检出以前的版本可以用以下命令：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">cvs co –r 1.1 drcls/readme </span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">或者</span>
				<span lang="EN-US">cvs –D yesterday drcls/readme</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">8</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、删除文件</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">若想从源码仓库中删除</span>
				<span lang="EN-US">readme</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件，首先应把客户机工作目录中的</span>
				<span lang="EN-US">readme</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件删除，然后使用</span>
				<span lang="EN-US">cvs</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的删除命令，最后提交删除，流程如下：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">rm readme</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">cvs rm readme</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">cvs commit –m “</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">现在不需要这个</span>
				<span lang="EN-US">readme</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件</span>
				<span lang="EN-US">”<span style="mso-spacerun: yes">  </span>readme</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如果系统类似错误：</span>
				<span lang="EN-US">cannot remove file `INSTALL' which has a numeric sticky tag of `1.1'</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">可以用命令</span>
				<span lang="EN-US">cvs update –A readme</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">后再删除文件。</span>
				<br />
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes">
								<br />以上为火山哥提供的,以下是我添加的部份:<br />1.在reader和writes文件中添加使用用户时要注意,当在reader中添加了某一只读用户后就不要在writers中添加此用户,如果在两个文件中都添加同一用户的话,在使用cvs时,CVS服务器会把此用户当做只读用户看待,当使用一些命令如import时会产生权限问题,以下是linux关于此问题的说明:<br />/* This command has the potential to modify the repository, so<br />   * we check if the user have permission to do that.<br />   *<br />   * (Only relevant for remote users -- local users can do<br />   * whatever normal Unix file permissions allow them to do.)<br />   *<br />   * The decision method:<br />   *<br />   *    If $CVSROOT/CVSADMROOT_READERS exists and user is listed<br />   *    in it, then read-only access for user.<br />   *<br />   *    Or if $CVSROOT/CVSADMROOT_WRITERS exists and user NOT<br />   *    listed in it, then also read-only access for user.<br />   *<br />   *    Else read-write access for user.<br />   */<br /></span>
				</span>
		</p>
<img src ="http://www.cppblog.com/klsmlzm/aggbug/15737.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/klsmlzm/" target="_blank">牵牛散步</a> 2006-11-28 16:18 <a href="http://www.cppblog.com/klsmlzm/archive/2006/11/28/15737.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>LINUX下简单的编译和使用动态链接库[compile .so use c++ in linux]</title><link>http://www.cppblog.com/klsmlzm/archive/2006/04/21/6026.html</link><dc:creator>牵牛散步</dc:creator><author>牵牛散步</author><pubDate>Fri, 21 Apr 2006 07:06:00 GMT</pubDate><guid>http://www.cppblog.com/klsmlzm/archive/2006/04/21/6026.html</guid><wfw:comment>http://www.cppblog.com/klsmlzm/comments/6026.html</wfw:comment><comments>http://www.cppblog.com/klsmlzm/archive/2006/04/21/6026.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/klsmlzm/comments/commentRss/6026.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/klsmlzm/services/trackbacks/6026.html</trackback:ping><description><![CDATA[
		<p>
				<font color="#000000">对动态链接库的概念其实还很模糊,自己的理解是:<br />把一些常用的代码,如函数,类等,编译成一个"包"即DLL(WINDOWS下)或者SO(LINUX下)文件,<br />然后供其它程序使用时直接调用里面封闭的函数即可,实现的代码的重用,也节省了<br />硬盘空间(这点可能是次要的吧).在WIDOWS下利用VC++可方便的生成DLL,在LINUX下则需要通过<br />各种编译命令来实现,对于像我这种菜鸟级程序员来说是个不小的挑战.<br />下面用个简单的例子来说明生成一个.SO文件和如何使用它:<br />1.我这有几个文件:<br />ConfigMap.cpp ConfigMap.h (读配置文件类)GetWinState.cpp GetWinState.h(ICE接口文件,由SLICE生成) GetWinSysState.cpp GetWinSysState.h (远程接口实现文件)<br />SocDbInfo.cpp(封装的一个类,用于调用ICE接口实现相关操作)<br />说明:此程序是为了获得远程主机(WINDOWS)上一些系统信息,比如:CPU占用率,硬盘使用情况,数据<br />库连接状态,内存使用情况等.<br />我想利用这些文件生成动态链接库.SO,主要是调用SocDbInfo.cpp里的类.然后可以拿到任意一个系统中(LINUX)去用.<br />2.开始编译:$c++ -I. -I$ICE_HOME/include -c *.cpp<br />编译后生成连接文件(我一直这样叫,可能不对哈),即以.O结尾的<br />3.生成动态链接库:$c++ -shared -o libMyApp.so *.o -L$ICE_HOME/lib -lIce -lIceUtil<br />这样就生成了libMyApp.so文件,即我们所要的<br />4.使用动态链接库:<br />新建两个文件Demo.cpp Demo.h(使用libMyApp.so提供的一些函数),<br />在Demo.h中声明了libMyApp.so中提供的函数和结构体,<br />Demo.h:代码如下:<br /><br />struct MemoryInf<br />{<br /> int TotalMem;//×ÜÄÚ´æ´óÐ¡<br /> int ValidMem;//¿ÉÊ¹ÓÃÄÚ´æ´óÐ¡<br /> int VirtualMem;//ÐéÄâÄÚ´æ´óÐ¡<br />};<br />struct DiskInf<br />{<br /> int TotalSpace;//Ó²ÅÌ´óÐ¡<br /> int FreeSpace;//Ê£Óà¿Õ¼ä´óÐ¡<br />};<br />struct DbInf<br />{<br /> int DbStat;//Êý¾Ý¿â×´Ì¬:"0"±íÊ¾Êý¾Ý¿â´¦ÔÚ¹Ø±Õ×´Ì¬,"1"±íÊ¾Êý¾Ý¿âÕý³£´ò¿ª,"2"±íÊ¾Êý¾Ý¿â´¦ÔÚ¹ÒÆð×´Ì¬<br /> int DbConnNum;//Êý¾Ý¿âÁ¬½ÓÊý<br />};<br />bool Inital( char *ResHostIP);//³õÊ¼»¯Í¨ÐÅÆ÷<br />bool DesIceCom();//Ïú»ÙICEÍ¨ÐÅÆ÷<br />MemoryInf GetMemInf();//µÃµ½ÄÚ´æÐÅÏ¢<br />int GetCpuInf();//µÃµ½CPUÕ¼ÓÃÂÊ<br />DbInf GetDbStat();//µÃµ½Êý¾Ý¿âÐÅÏ¢<br />DiskInf GetDiskStat();//µÃµ½Ó²ÅÌÐÅÏ¢</font>
		</p>
		<font color="#000000">
				<p>
						<br />
						<br />注:乱码是由于我的LINUX下不支持中文哈,是注释不用管它<br />Demo.cpp:代码如下:<br />#include &lt;string.h&gt;<br />#include &lt;iostream&gt;<br />#include "Demo.h"</p>
				<p>
						<br />int main( int argc , char* argv[])<br />{</p>
				<p> MemoryInf mymem;<br /> DiskInf mydisk;<br /> DbInf mydb;<br /> Inital( argv[1]);<br /> mydisk = GetDiskStat();<br /> mymem = GetMemInf();<br /> mydb = GetDbStat();<br /> printf("disk total space:%d\n",mydisk.TotalSpace);<br /> printf("disk FreeSpace space:%d\n",mydisk.FreeSpace);<br /> printf("Memory TotalMem:%d\n",mymem.TotalMem);<br /> printf("ValidMem:%d\n",mymem.ValidMem);<br /> printf("VirtualMem:%d\n",mymem.VirtualMem);<br /> printf("DbConnNum:%d\n",mydb.DbConnNum);<br /> printf("DbStat:%d\n",mydb.DbStat);<br /> printf("cpu:%d\n",GetCpuInf());<br /> DesIceCom();<br /> return 1;<br />}<br /><br /><br />5.编译文件生成可执行程序:<br />用以下命令:<br />$c++ -lMyApp -o Demo Demo.cpp<br />说明:-lMyApp参数表示,用动态链接库libMyApp.so一起进行编译,对了libMyApp.so最好放在/usr/lib目录下哈<br />如不出意外刚会生成名为Demo的可执行文件<br /><br /></p>
		</font>
<img src ="http://www.cppblog.com/klsmlzm/aggbug/6026.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/klsmlzm/" target="_blank">牵牛散步</a> 2006-04-21 15:06 <a href="http://www.cppblog.com/klsmlzm/archive/2006/04/21/6026.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++编程中，利用WINDOWS API获得系统状态信息[CPU占用率，硬盘使用情况，内存使用情况]</title><link>http://www.cppblog.com/klsmlzm/archive/2006/04/14/5522.html</link><dc:creator>牵牛散步</dc:creator><author>牵牛散步</author><pubDate>Fri, 14 Apr 2006 03:35:00 GMT</pubDate><guid>http://www.cppblog.com/klsmlzm/archive/2006/04/14/5522.html</guid><wfw:comment>http://www.cppblog.com/klsmlzm/comments/5522.html</wfw:comment><comments>http://www.cppblog.com/klsmlzm/archive/2006/04/14/5522.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/klsmlzm/comments/commentRss/5522.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/klsmlzm/services/trackbacks/5522.html</trackback:ping><description><![CDATA[
		<p>#include &lt;Ice/Ice.h&gt;<br />#include &lt;iostream&gt;<br />#include &lt;GetWinSysState.h&gt;<br />#include &lt;Winbase.h&gt;<br />#include &lt;conio.h&gt;<br />#include &lt;stdio.h&gt;<br />#include &lt;fstream&gt;<br />#include &lt;iostream&gt;<br />#include &lt;string&gt;<br />#include &lt;direct.h&gt;<br /><br />#define SystemBasicInformation       0<br />#define SystemPerformanceInformation 2<br />#define SystemTimeInformation        3</p>
		<p>#define Li2Double(x) ((double)((x).HighPart) * 4.294967296E9 + (double)((x).LowPart))<br />//ICE预编译语句</p>
		<p>#ifdef _DEBUG<br />#pragma comment(lib, "iced.lib")<br />#pragma comment(lib, "iceutild.lib")<br />#else<br />#pragma comment(lib, "ice.lib")<br />#pragma comment(lib, "iceutil.lib")<br />#endif<br /></p>
		<p>typedef struct<br />{<br />    DWORD   dwUnknown1;<br />    ULONG   uKeMaximumIncrement;<br />    ULONG   uPageSize;<br />    ULONG   uMmNumberOfPhysicalPages;<br />    ULONG   uMmLowestPhysicalPage;<br />    ULONG   uMmHighestPhysicalPage;<br />    ULONG   uAllocationGranularity;<br />    PVOID   pLowestUserAddress;<br />    PVOID   pMmHighestUserAddress;<br />    ULONG   uKeActiveProcessors;<br />    BYTE    bKeNumberProcessors;<br />    BYTE    bUnknown2;<br />    WORD    wUnknown3;<br />} SYSTEM_BASIC_INFORMATION;</p>
		<p>typedef struct<br />{<br />    LARGE_INTEGER   liIdleTime;<br />    DWORD           dwSpare[76];<br />} SYSTEM_PERFORMANCE_INFORMATION;</p>
		<p>typedef struct<br />{<br />    LARGE_INTEGER liKeBootTime;<br />    LARGE_INTEGER liKeSystemTime;<br />    LARGE_INTEGER liExpTimeZoneBias;<br />    ULONG         uCurrentTimeZoneId;<br />    DWORD         dwReserved;<br />} SYSTEM_TIME_INFORMATION;</p>
		<p>
				<br />// ntdll!NtQuerySystemInformation (NT specific!)<br />//<br />// The function copies the system information of the<br />// specified type into a buffer<br />//<br />// NTSYSAPI<br />// NTSTATUS<br />// NTAPI<br />// NtQuerySystemInformation(<br />//    IN UINT SystemInformationClass,    // information type<br />//    OUT PVOID SystemInformation,       // pointer to buffer<br />//    IN ULONG SystemInformationLength,  // buffer size in bytes<br />//    OUT PULONG ReturnLength OPTIONAL   // pointer to a 32-bit<br />//                                       // variable that receives<br />//                                       // the number of bytes<br />//                                       // written to the buffer <br />// );<br />typedef LONG (WINAPI *PROCNTQSI)(UINT,PVOID,ULONG,PULONG);</p>
		<p>PROCNTQSI NtQuerySystemInformation;</p>
		<p>/*<br />  功能:得到CPU使用状态<br />  参数:无<br />  返回值:内存占用率<br />  作者:牵牛散步<br />*/<br />int GetCpuStat()<br />{<br /> SYSTEM_PERFORMANCE_INFORMATION SysPerfInfo;<br />    SYSTEM_TIME_INFORMATION        SysTimeInfo;<br />    SYSTEM_BASIC_INFORMATION       SysBaseInfo;<br />    double                         dbIdleTime;<br />    double                         dbSystemTime;<br />    LONG                           status;<br />    LARGE_INTEGER                  liOldIdleTime = {0,0};<br />    LARGE_INTEGER                  liOldSystemTime = {0,0};<br /> int UsageCpu = 0;<br />    NtQuerySystemInformation = (PROCNTQSI)GetProcAddress(<br />  GetModuleHandle("ntdll"),<br />  "NtQuerySystemInformation"<br />  );<br /> <br />    if (!NtQuerySystemInformation)<br />        return 0;<br /> <br />    status = NtQuerySystemInformation(SystemBasicInformation,&amp;SysBaseInfo,sizeof(SysBaseInfo),NULL);<br />    if (status != NO_ERROR)<br />        return 0;<br />    <br /> for( int t = 0 ; t &lt; 2 ; t++ )<br />    {<br />  status = NtQuerySystemInformation(SystemTimeInformation,&amp;SysTimeInfo,sizeof(SysTimeInfo),0);<br />        if (status!=NO_ERROR)<br />            return 0;<br />  <br />        status = NtQuerySystemInformation(SystemPerformanceInformation,&amp;SysPerfInfo,sizeof(SysPerfInfo),NULL);<br />        if (status != NO_ERROR)<br />            return 0;<br />  <br />  if (liOldIdleTime.QuadPart != 0)<br />  {<br />            dbIdleTime = Li2Double(SysPerfInfo.liIdleTime) - Li2Double(liOldIdleTime);<br />            dbSystemTime = Li2Double(SysTimeInfo.liKeSystemTime) - Li2Double(liOldSystemTime);<br />   <br />            dbIdleTime = dbIdleTime / dbSystemTime;<br />   <br /><br />            dbIdleTime = 100.0 - dbIdleTime * 100.0 / (double)SysBaseInfo.bKeNumberProcessors + 0.5;<br />   UsageCpu = (int)dbIdleTime;<br /><br />  }<br />  <br />        // store new CPU's idle and system time<br />        liOldIdleTime = SysPerfInfo.liIdleTime;<br />        liOldSystemTime = SysTimeInfo.liKeSystemTime;<br />  <br />        // wait one second<br />        Sleep(500);<br />    }<br /> return UsageCpu;<br /> <br />}<br /><br /><br />/*<br />  功能:得到内存使用状态<br />  参数:无<br />  返回值:内存信息结构体[包括总的物理内存,还可使用内存,虚拟内存,单位为K]<br />  作者:牵牛散步<br />*/<br />MemoryInf MemorySta()<br />{<br /> MemoryInf tmp;//在ICE SLICE里定义的信息结构体<br /> MEMORYSTATUS memStatus;<br /> GlobalMemoryStatus(&amp;memStatus);<br /> DWORD tom=memStatus.dwTotalPhys/1024;<br /> DWORD mem=memStatus.dwAvailPhys/1024;<br /> DWORD res=memStatus.dwAvailVirtual/1024;<br /> tmp.TotalMem = (int)tom;<br /> tmp.ValidMem = (int)mem;<br /> tmp.VirtualMem = (int)res;<br /> return tmp;<br />}<br /><br /><br />/*<br /> 功能:得到硬盘使用情况<br /> 参数:无<br /> 返回值:硬盘信息结构体<br /> 作者:牵牛散步<br />*/<br />DiskInf GetDiskSta()<br />{<br /> ULARGE_INTEGER FreeAvailable,TotalNum,TotalFreeNum;</p>
		<p> char p[3];<br /> bool b_flag;<br /> DiskInf tmp;//ICE SLICE里定义的硬盘信息结构体<br /> tmp.TotalSpace = 0;<br /> tmp.FreeSpace = 0;<br /> //得到有效的驱动器名,即盘符 <br /> for( int drive = 1; drive &lt;= 26; drive++ )<br /> {<br />  if( !_chdrive( drive ) )<br />  {<br />   memset( p , 0 , sizeof(p));<br />   p[0] = drive + 'A' - 1;<br />   p[1] = ':';<br />   p[2] = '\0';<br />   b_flag = GetDiskFreeSpaceEx( p ,&amp;FreeAvailable,&amp;TotalNum,&amp;TotalFreeNum );<br />   if( b_flag )<br />   {<br />    tmp.TotalSpace += (int)(TotalNum.QuadPart/(1024*1024));<br />    tmp.FreeSpace += (int)(FreeAvailable.QuadPart/(1024*1024));<br />   }<br />  }<br /> }<br /> return tmp;<br />}<br /><br />int main()<br />{<br />   return 1;<br />}</p>
<img src ="http://www.cppblog.com/klsmlzm/aggbug/5522.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/klsmlzm/" target="_blank">牵牛散步</a> 2006-04-14 11:35 <a href="http://www.cppblog.com/klsmlzm/archive/2006/04/14/5522.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>#pragma 预处理指令详解[转载]</title><link>http://www.cppblog.com/klsmlzm/archive/2006/02/28/3563.html</link><dc:creator>牵牛散步</dc:creator><author>牵牛散步</author><pubDate>Tue, 28 Feb 2006 01:46:00 GMT</pubDate><guid>http://www.cppblog.com/klsmlzm/archive/2006/02/28/3563.html</guid><wfw:comment>http://www.cppblog.com/klsmlzm/comments/3563.html</wfw:comment><comments>http://www.cppblog.com/klsmlzm/archive/2006/02/28/3563.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/klsmlzm/comments/commentRss/3563.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/klsmlzm/services/trackbacks/3563.html</trackback:ping><description><![CDATA[<H2><B>
<TABLE cellSpacing=0 cellPadding=0 width="95%" border=0>
<TBODY>
<TR>
<TD align=middle width="100%">
<H2><B></B>&nbsp;</H2></TD></TR>
<TR>
<TD width="100%">在所有的预处理指令中，#Pragma 指令可能是最复杂的了，它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作。#pragma指令对每个编译器给出了一个方法,在保持与C和C ++语言完全兼容的情况下,给出主机或操作系统专有的特征。依据定义,编译指示是机器或操作系统专有的,且对于每个编译器都是不同的。 <BR>其格式一般为: #Pragma Para <BR>其中Para 为参数，下面来看一些常用的参数。 
<P><FONT size=2><BR>(1)<SPAN style="COLOR: rgb(255,0,0)">message 参数</SPAN>。 Message 参数是我最喜欢的一个参数，它能够在编译信息输出窗 <BR>口中输出相应的信息，这对于源代码信息的控制是非常重要的。其使用方法为： <BR>#Pragma message(“消息文本”) <BR>当编译器遇到这条指令时就在编译输出窗口中将消息文本打印出来。 <BR>当我们在程序中定义了许多宏来控制源代码版本的时候，我们自己有可能都会忘记有没有正确的设置这些宏，此时我们可以用这条指令在编译的时候就进行检查。假设我们希望判断自己有没有在源代码的什么地方定义了_X86这个宏可以用下面的方法 <BR>#ifdef _X86 <BR>#Pragma message(“_X86 macro activated!”) <BR>#endif <BR>当我们定义了_X86这个宏以后，应用程序在编译时就会在编译输出窗口里显示“_ <BR>X86 macro activated!”。我们就不会因为不记得自己定义的一些特定的宏而抓耳挠腮了 <BR>。 <BR><BR>(2)另一个使用得比较多的pragma参数是<SPAN style="COLOR: rgb(255,0,0)">code_seg</SPAN>。格式如： <BR>#pragma code_seg( ["section-name"[,"section-class"] ] ) <BR>它能够设置程序中函数代码存放的代码段，当我们开发驱动程序的时候就会使用到它。 <BR><BR>(3)<SPAN style="COLOR: rgb(255,0,0)">#pragma once </SPAN>(比较常用） <BR>只要在头文件的最开始加入这条指令就能够保证头文件被编译一次，这条指令实际上在VC6中就已经有了，但是考虑到兼容性并没有太多的使用它。 <BR><BR>(4)<SPAN style="COLOR: rgb(255,0,0)">#pragma hdrstop</SPAN>表示预编译头文件到此为止，后面的头文件不进行预编译。BCB可以预编译头文件以加快链接的速度，但如果所有头文件都进行预编译又可能占太多磁盘空间，所以使用这个选项排除一些头文件。 <BR>有时单元之间有依赖关系，比如单元A依赖单元B，所以单元B要先于单元A编译。你可以用#pragma startup指定编译优先级，如果使用了#pragma package(smart_init) ，BCB就会根据优先级的大小先后编译。 <BR><BR>(5)<SPAN style="COLOR: rgb(255,0,0)">#pragma resource "*.dfm"</SPAN>表示把*.dfm文件中的资源加入工程。*.dfm中包括窗体 <BR>外观的定义。 <BR><BR>(6)<SPAN style="COLOR: rgb(255,0,0)">#pragma warning( disable : 4507 34; once : 4385; error : 164 ) </SPAN><BR>等价于： <BR>#pragma warning(disable:4507 34) // 不显示4507和34号警告信息 <BR>#pragma warning(once:4385) // 4385号警告信息仅报告一次 <BR>#pragma warning(error:164) // 把164号警告信息作为一个错误。 <BR>同时这个pragma warning 也支持如下格式： <BR>#pragma warning( push [ ,n ] ) <BR>#pragma warning( pop ) <BR>这里n代表一个警告等级(1---4)。 <BR>#pragma warning( push )保存所有警告信息的现有的警告状态。 <BR>#pragma warning( push, n)保存所有警告信息的现有的警告状态，并且把全局警告 <BR>等级设定为n。 <BR>#pragma warning( pop )向栈中弹出最后一个警告信息，在入栈和出栈之间所作的 <BR>一切改动取消。例如： <BR>#pragma warning( push ) <BR>#pragma warning( disable : 4705 ) <BR>#pragma warning( disable : 4706 ) <BR>#pragma warning( disable : 4707 ) <BR>//....... <BR>#pragma warning( pop ) <BR>在这段代码的最后，重新保存所有的警告信息(包括4705，4706和4707)。 <BR>（7）<SPAN style="COLOR: rgb(255,0,0)">pragma comment(...) </SPAN><BR>该指令将一个注释记录放入一个对象文件或可执行文件中。 <BR>常用的lib关键字，可以帮我们连入一个库文件。 <BR></FONT><FONT size=2><SPAN class=unnamed3><SPAN id=zoom>(8)用pragma导出dll中的函数<BR>
<P>&nbsp;&nbsp;&nbsp; 传统的到出 DLL 函数的方法是使用模块定义文件 (.def)，Visual C++ 提供了更简洁方便的方法，那就是“__declspec()”关键字后面跟“dllexport”，告诉连接去要导出这个函数，例如：</P>
<DIV style="COLOR: rgb(34,34,170); BACKGROUND-COLOR: rgb(245,245,240)"><PRE>__declspec(dllexport) int __stdcall MyExportFunction(int iTest);</PRE></DIV>
<P>&nbsp;&nbsp;&nbsp; 把“__declspec(dllexport)”放在函数声明的最前面，连接生成的 DLL 就会导出函数“_MyExportFunction@4”。</P>
<P>&nbsp;&nbsp;&nbsp; 上面的导出函数的名称也许不是我的希望的，我们希望导出的是原版的“MyExportFunction”。还好，VC 提供了一个预处理指示符“#pragma”来指定连接选项 (不仅仅是这一个功能，还有很多指示功能) ，如下：</P>
<DIV style="COLOR: rgb(34,34,170); BACKGROUND-COLOR: rgb(245,245,240)"><PRE>#pragma comment(linker,"/EXPORT:MyExportFunction=_MyExportFunction@4")</PRE></DIV>
<P>&nbsp;&nbsp;&nbsp; 这下就天如人愿了：）。如果你想指定导出的顺序，或者只将函数导出为序号，没有 Entryname，这个预处理指示符 (确切地说是连接器) 都能够实现，看看 MSDN 的语法说明：</P>
<DIV style="COLOR: rgb(34,34,170); BACKGROUND-COLOR: rgb(245,245,240)"><PRE>/EXPORT:entryname[,@ordinal[,NONAME]][,DATA]</PRE></DIV>
<P>&nbsp;&nbsp; @ordinal 指定顺序；NONAME 指定只将函数导出为序号；DATA 关键字指定导出项为数据项。</P></SPAN></SPAN><BR><BR style="COLOR: rgb(255,0,0)"><SPAN style="COLOR: rgb(255,0,0)">每个编译程序可以用#pragma指令激活或终止该编译程序支持的一些编译功能</SPAN>。例如，对循环优化功能： <BR>#pragma loop_opt(on) // 激活 <BR>#pragma loop_opt(off) // 终止 <BR>有时，程序中会有些函数会使编译器发出你熟知而想忽略的警告，如“Parameter xxx is never used in function xxx”，可以这样： <BR>#pragma warn —100 // Turn off the warning message for warning #100 <BR>int insert_record(REC *r) <BR>{ /* function body */ } <BR>#pragma warn +100 // Turn the warning message for warning #100 back on <BR>函数会产生一条有唯一特征码100的警告信息，如此可暂时终止该警告。 <BR>每个编译器对#pragma的实现不同，在一个编译器中有效在别的编译器中几乎无效。可从编译器的文档中查看。</FONT></TD></TR></TBODY></TABLE></B></H2><img src ="http://www.cppblog.com/klsmlzm/aggbug/3563.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/klsmlzm/" target="_blank">牵牛散步</a> 2006-02-28 09:46 <a href="http://www.cppblog.com/klsmlzm/archive/2006/02/28/3563.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>