2008-04-03 07:50PM

Ubuntu配置记录-1 网络与源

linux

把Ubuntu重装了一遍,配置起来挺麻烦的,于是干脆记录一下,以免以后又忘记。

安装完成后,最重要的是网络问题。学校使用802.1x认证,需要特殊的软件来登录。我用的是华为的H3C。
以下是别人给的一份文档,很有用,我就不自己写了XD

在Ubuntu Linux下面使用H3C认证客户端上网,这需要华为公司专门为Linux开发的软件h3c802.1xclient.tar.gz
1)下载了H3C后,解压文件:

$sudo tar –xvzf h3c802.1xclient.tar.gz

这会解压到当前目录下,生成一个h3c802.1xClient目录。

或者可以指定解压路径:

$sudo tar –C h3c802.1xclient.tar.gz [path]

2)转到此目录下:$cd h3c802.1xClient

运行里面的pre.ps文件:

$sudo ./pre.ps

再运行里面的linux1x文件(可以查看里面的说明文档):

$sudo linux1x

3)如果里面的链接库缺少H3C必要的libstdc++-libc6.2-2.so.3文件,会报错.

根据提示信息,先转到链接库目录:

$cd lib

在里面找到一个相似的文件,与所需的文件建立硬链接:

$sudo ln libc.so.6 libstdc++-libc6.2-2.so.3

4)再次运行linux1x文件,可以上网了!:

$sudo linux1x [-p|-d|-k]

其中,参数-p表示注销当前帐号信息,重新验证;-d表示通过验证后返回控制

台继续执行其他命令;-k表示断开网络连接。

5)PS:经常出现这种情况--不知道什么时候网络断了,而用户无法及时得知。解决办法之一是:按

下Ctrl+Alt+F1切换到命令行控制台,使用任何一个本地帐户登录联网,然后输入命令:

$ping [学校服务器代理(202.116.64.226)]。

在此命令下,如果网络畅通,会一直有数据包返回。

在运行时千万不能忘了sudo,我之前就是因为忘了sudo导致老是提示“ERROR! Can't initial authentication program !”,搞得我还以为软件坏了OTL……

然后就是设置更新的源,用官方的源会慢死的……

apt的源列表文件保存在/etc/apt/source.list文件中,可以用任意文本编辑器编辑,注意要用root权限来编辑,也就是用sudo。编辑前最好保存一份复本:

$sudo cp /etc/apt/sources.list /etc/apt/sources.list_backup

然后就可以编辑了:

$sudo gedit /etc/apt/sources.list

因为在教育网里,所以用中科大的源会很爽:

deb http://debian.ustc.edu.cn/ubuntu/ gutsy main restricted universe multiverse
deb http://debian.ustc.edu.cn/ubuntu/ gutsy-backports restricted universe multiverse
deb http://debian.ustc.edu.cn/ubuntu/ gutsy-proposed main restricted universe multiverse
deb http://debian.ustc.edu.cn/ubuntu/ gutsy-security main restricted universe multiverse
deb http://debian.ustc.edu.cn/ubuntu/ gutsy-updates main restricted universe multiverse
deb-src http://debian.ustc.edu.cn/ubuntu/ gutsy main restricted universe multiverse
deb-src http://debian.ustc.edu.cn/ubuntu/ gutsy-backports main restricted universe multiverse
deb-src http://debian.ustc.edu.cn/ubuntu/ gutsy-proposed main restricted universe multiverse
deb-src http://debian.ustc.edu.cn/ubuntu/ gutsy-security main restricted universe multiverse
deb-src http://debian.ustc.edu.cn/ubuntu/ gutsy-updates main restricted universe multiverse

另外cn99也很重要:

deb http://ubuntu.cn99.com/ubuntu/ gutsy main restricted universe multiverse
deb http://ubuntu.cn99.com/ubuntu/ gutsy-security main restricted universe multiverse
deb http://ubuntu.cn99.com/ubuntu/ gutsy-updates main restricted universe multiverse
deb http://ubuntu.cn99.com/ubuntu/ gutsy-proposed main restricted universe multiverse
deb http://ubuntu.cn99.com/ubuntu/ gutsy-backports main restricted universe multiverse
deb-src http://ubuntu.cn99.com/ubuntu/ gutsy main restricted universe multiverse
deb-src http://ubuntu.cn99.com/ubuntu/ gutsy-security main restricted universe multiverse
deb-src http://ubuntu.cn99.com/ubuntu/ gutsy-updates main restricted universe multiverse
deb-src http://ubuntu.cn99.com/ubuntu/ gutsy-proposed main restricted universe multiverse
deb-src http://ubuntu.cn99.com/ubuntu/ gutsy-backports main restricted universe multiverse
deb http://ubuntu.cn99.com/ubuntu-cn/ gutsy main restricted universe multiverse

把这两个源加到source.list的最前端就行,不用像有些教程说的那样要把其它的覆盖掉。

这些源都是用于Ubuntu 7.10(Gutsy)的,要给其他版本添加源的应该把gutsy换成相应的代号就行了吧(中科大的源我就是这么干的XD)。

Comments(0)

Tags:

2008-04-03 02:11AM

更新了文泉驿

linux

把文泉驿正黑更新到了夸父正式版(0.5 Final),终于可以正常显示9pt的“/”号了

话说文泉驿确实挺美观的,不必再用Win下的版权字体了。

衷心希望文泉驿越做越好

附:文泉驿正黑相关页面:http://wenq.org/index.cgi?ZenHei

Comments(0)

Tags:

2008-04-01 11:04PM

[转]listings 宏包札记

TeX

原文貌似是在 http://blog.linuxgem.org/lyanry/show/319.html,不过链接已经失效了

此文是从http://hi.baidu.com/shawpinlee/blog/item/9ec431cbae28e41cbe09e6e4.html搬过来的


listings 是专用于代码排版的 LaTeX 宏包,可对关键词、注释和字符串等使用不同的字体和颜色或颜色,也可以为代码添加边框、背景等风格。

1 基本用法

下面给出一份用于排版 C 语言 HelloWorld 程序代码的完整的 LaTeX 文档:

\documentclass{article}
\usepackage{listings}

\begin{document}

\begin{lstlisting}[language=C]
int main(int argc, char ** argv)
{
/* print a string "Hello world!"
printf("Hello world!\n");

return 0;
}
\end{lstlisting}

\end{document}

排版效果如下图所示:

2 对计算机语言的支持

listings 宏包支持大约近百种计算机语言,下面只列举几个常用的:

  • C :ANSI, Handel, Objective, Sharp
  • C :ANSI, GNU, ISO, Visual
  • Delphi
  • Java :empty, AspectJ
  • TeX :AlLaTeX, common, LaTeX, plain, primitive
  • XML
  • Gnuplot
  • HTML
  • Python
  • Ruby
  • make :empty, gnu

从上面的语言支持列表可看到有些语言是分为了多种类型的,比如 C 语言分为了 ANSI, Handel, Objective, Sharp 等类型。在使用 listings 宏包时,对某种语言存在多种类型的情况下,可以指定所需类型的,例如:

\begin{lstlisting}[language={[ANSI]C}]
int main(int argc, char ** argv)
{
/* print a string "Hello world!"
printf("Hello world!\n");

return 0;
}
\end{lstlisting}

3 语法高亮

listings 宏包提供了关键词高亮与注释高亮,分别体现为 keywordstyle 与 commentstyle 参数。

下面将 C 语言关键词使用浅蓝色高亮显示,代码采用灰色显示:

\documentclass{article}
\usepackage{listings}
\usepackage{xcolor} % 使用颜色宏包

\begin{document}

\begin{lstlisting}[language={[ANSI]C}, keywordstyle=\color{blue!70}, commentstyle=\color{red!50!green!50!blue!50}]
int main(int argc, char ** argv)
{
/* print a string "Hello world!" */
printf("Hello world!\n");

return 0;
}
\end{lstlisting}

\end{document}

注意,要使用 listings 宏包提供的语法高亮,需要 xcolor 宏包支持。

语法高亮的排版效果如下图所示:

4 添加边框

listings 宏包为代码边框提供了很多风格,大体可分为带有阴影的边框与圆角边框。这里仅仅给出一个阴影边框的示例,至于其它边框风格,可查阅 listings 宏包文档,里面给出了一些示例。

下面 LaTeX 源文档将为代码添加阴影边框,并将阴影设置为浅灰色:

\begin{lstlisting}[language={[ANSI]C}, keywordstyle=\color{blue!70}, commentstyle=\color{red!50!green!50!blue!50}, frame=shadowbox, rulesepcolor=\color{red!20!green!20!blue!20}]
int main(int argc, char ** argv)
{
/* print a string "Hello world!" */
printf("Hello world!\n");

return 0;
}
\end{lstlisting}

排版效果如下图:

5 添加行号

很多时候需要对文档中的代码进行解释,只有带有行号的代码才可以让解释更清晰,因为你只需要说第 x 行代码有什么作用即可。如果没有行号,那对读者而言就太残忍了,他们不得不从你的文字叙述中得知行号信息,然后去一行一行的查到相应代码行。

listings 宏包通过参数 numbers 来设定行号,该参数的值有两个,分别是 left 与 right,表示行号显示在代码的左侧还是右侧。下面为带有边框的代码添加行号,并设置行号字体为 \tiny:

\begin{lstlisting}[language={[ANSI]C}, numbers=left, numberstyle=\tiny, keywordstyle=\color{blue!70}, commentstyle=\color{red!50!green!50!blue!50}, frame=shadowbox, rulesepcolor=\color{red!20!green!20!blue!20}]
int main(int argc, char ** argv)
{
/* print a string "Hello world!" */
printf("Hello world!\n");

return 0;
}
\end{lstlisting}

排版效果如下图所示:

6 全局设置

上面所给的各个示例中,lstlisting 环境后面尾随了很多参数,要是每使用一次 lstlisting 环境就要设置这么多参数,那就没什么意思了。

可以使用 \lstset 命令在 LaTeX 源文档的导言区设定好 lstlisting 环境所用的公共参数,如下:

\documentclass{article}
\usepackage{listings}
\usepackage{xcolor}

\begin{document}

\lstset{numbers=left,
numberstyle=\tiny,
keywordstyle=\color{blue!70}, commentstyle=\color{red!50!green!50!blue!50},
frame=shadowbox,
rulesepcolor=\color{red!20!green!20!blue!20}
}

\begin{lstlisting}[language={[ANSI]C}]
int main(int argc, char ** argv)
{
/* print a string "Hello world!" */
printf("Hello world!\n");

return 0;
}
\end{lstlisting}

\end{document}

7 显示中文

listings 宏包默认是不支持包含中文字串的代码显示的,但是可以使用 “逃逸” 字串来显示中文。

在 \lstset 命令中设置逃逸字串的开始符号与终止符号,推荐使用的符号是左引号,即 “ `

\lstset{numbers=left,
numberstyle=\tiny, keywordstyle=\color{blue!70}, commentstyle=\color{red!50!green!50!blue!50},
frame=shadowbox, rulesepcolor=\color{red!20!green!20!blue!20},
escapeinside=``}

……

\begin{lstlisting}[language={[ANSI]C}]
int main(int argc, char ** argv)
{
/* print a string "Hello world!" */
printf("`我爱中文`!\n");

return 0;
}
\end{lstlisting}

8 调整一下边距

listings 的代码框的宽度默认是与页芯等宽的,其上边距也过于小,可根据自己的审美观念适度调整一下。我通常是将代码框的左右边距设置为 2em,上边距为 1em,下边距采用默认值即可,所作设定如下:

\lstset{numbers=left, numberstyle=\tiny, keywordstyle=\color{blue!70}, commentstyle=\color{red!50!green!50!blue!50}, frame=shadowbox, rulesepcolor=\color{red!20!green!20!blue!20},escapeinside=``, xleftmargin=2em,xrightmargin=2em, aboveskip=1em}
...

Comments(2)

Tags:

2008-04-01 11:04AM

IE6中关于文本框中的光标位置与选中区

javascript

在FireFox下,要获取一个文本框的光标位置,可以通过获取它的选择起点和终点解决:当没有选中文字时,selectionStart和selectionEnd均等于文本框的光标位置;有选中文字时,seletionStart和selectionEnd的含义与它们名字的字面含义相同。

但是IE6里没有提供这两个属性,只能通过它的TextRange对象来曲线解决:

var expobj = document.getElementById("aTextbox");
if (document.selection){               //IE
  expobj.focus();
  sel = document.selection.createRange();
  ……
}
通过document.selection.createRange(),可以返回当前文档选中部分的TextRange对象。为了防止操作到文档的其他选中区域,要首先把焦点转给要操作的文本框。
之后就可以通过更改sel来操作选中的文本,包括改变文字什么的。
要获得选中区在文本框的位置,要用曲线点的方法:把选中区开头移动到文本框的最前端,然后选中区文本的长度就是选中区末端在文本框中的位置了:
sel.moveStart("character",-expobj.value.length);
pos = sel.text.length;
同理可得选中开头处的位置。
使用sel.select()可以令改动后的选择范围生效。...

Comments(0)

Tags:

2008-03-30 11:03AM

[转]在Ubuntu下简易配置Tex UTF-8中文环境

TeX

转自LDCN

在Ubuntu下配置使用Tex中文环境有好几种选择和相关方法,有些比较简单(比如直接用XeTeX),有些则相对麻烦一点(比如手动去生成相关字体)。

现在应用最广的一般是TexLive CJK,如果想尽量使你的Tex文档在Windows/Linux下互相通用,一般都选择这种组合,而且这也是目前最成熟的(相对于XeTeX)。

今天这篇文章中的方法,是利用目前已经成功的方法,再结合Ubuntu的特定环境所作的。希望能给想在Ubuntu下配置Tex中文环境的朋友一个参考。

—–

先介绍一下之前最流行的在Linux下配置Tex的方法,一般是参考这篇文章:

http://mailboxpublic.googlepages.com/texlive2007cjkchinesehowto

下载1GB左右的ISO档,挂载ISO并安装其中的TexLive,再自己生动生成相关字体文件。一般都能顺利的配置好Tex UTF-8的中文环境。

但是对于习惯了apt-get的用户,可能不愿意从外部安装Tex套件。因此,我参考了一些文章,琢磨出了这个利用Ubuntu源里的TexLive,再手动生成字体包的方法,优点是:

  • 不需要下载1GB的ISO档,只需要下载我准备的几百KB的字体生成要用的相关文件。
  • 只从Ubuntu源里安装相关Tex套件,不往系统目录写入其他文件,方便删除。
  • 仍需要手动生成字体文件,不过是安装在自己的主目录下。

好。请看详细方法:

一、安装TexLive Latex CJK:

打开终端,执行下述命令安装TexLive和常用的一些Latex宏包(可以根据自己的需要增改):

sudo apt-get install texlive texlive-math-extra texlive-latex-base texlive-latex-extra texlive-latex-recommended texlive-pictures texlive-science texlive-bibtex-extra texlive-common latex-beamer

如果硬盘充裕的话,直接完整安装也可以:

sudo apt-get install texlive-full latex-beamer

安装完后,就可以安装CJK的相关软件包了,如果只需要获得中文支持,那么执行:

sudo apt-get install latex-cjk-chinese ttf-arphic-* hbf-*

否则,建议安装latex-cjk-all以获取完整支持。

二、生成中文字体包

安装好TexLive CJK以后,还需要安装一个软件──fontforge用于生成字体:

sudo apt-get install fontforge

好了,前面所做的,都是标准的Debian式安装,假如哪天你不需要了,直接remove安装即可。

生成字体前,请自己准备你需要生成的字体文件:simsun.ttc,simhei.ttf等,这里以simsun.ttc(宋体)为例。

准备好后下载下面这个包,解压到一个地方,如自己的主目录~/font:

font.tar.bz2

然后把simsun.ttc也复制到~/font里去,执行下面的命令生成字体地图:

cd ~/font
time fontforge -script subfonts.pe simsun.ttc song Unicode.sfd

加time是为了计算时间,因为比较耗时,在我的Core 2 Duo T5500下,生成song花了40分钟,生成hei花了24分钟,仅供参考。

字体生成好了,再建立一个描述文件吧。

在~/font下,建立一个makemap文件,内容如下:

for i in *.tfm
do
cat >> song.map << EOF
${i%.tfm} ${i%.tfm} < ${i%.tfm}.pfb
EOF
done

然后在终端下执行:chmod x makemap让文件加上执行权限,最后执行:

./makemap

再建立一个一个c70song.fd文件:

% This is c70song.fd for CJK package.
% created by Edward G.J. Lee
% modify by Yue Wang
\ProvidesFile{c70song.fd}
\DeclareFontFamily{C70}{song}{\hyphenchar \font\m@ne}
\DeclareFontShape{C70}{song}{m}{n}{<-> CJK * song}{}
\DeclareFontShape{C70}{song}{bx}{n}{<-> CJKb * song}{\CJKbold}
\endinput

好的,相关文件都已生成,开始复制字体使其生效。

执行下面的命令,在你的主目录下生成隐藏的个人Tex配置,如果你哪天不需要了,也可以删除:

mkdir -p ~/.texmf-var/fonts/map/dvips/CJK
mkdir -p ~/.texmf-var/fonts/tfm/CJK/song
mkdir -p ~/.texmf-var/fonts/type1/CJK/song
mkdir -p ~/.texmf-var/tex/latex/CJK/UTF8

建立完这层层叠叠的目录以后,就把刚刚生成的字体复制进去吧。

cp ~/font/song.map ~/.texmf-var/fonts/map/dvips/CJK
cp ~/font/*.tfm ~/.texmf-var/fonts/tfm/CJK/song
cp ~/font/*.pfb ~/.texmf-var/fonts/type1/CJK/song
cp ~/font/c70song.fd ~/.texmf-var/tex/latex/CJK/UTF8

复制完后就执行命令刷新缓存,让它生效:

sudo texhash
updmap --enable Map song.map

假如一切顺序的话, 就测试一下我们安装的song体是否能用吧。

在任意位置编辑这个文件,然后保存为test.tex,支持UTF-8格式:

\documentclass{article}
\usepackage{CJKutf8}
\begin{document}
\begin{CJK}{UTF8}{song}
你好!这里是Ubuntu下的TexLive CJK环境!
\end{CJK}
\end{document}

 

执行分别生成pdf文档和用evince来查看文档:

pdflatex test.tex
evince test.pdf

看看你的过程顺不顺利,生成的PDF档也是下面这样吗?

texlive.png

texlive-2.png

用同样的方法搞定hei和kai等常用中文标准字体,开始享受你的Tex吧!

参考资料是:

Fedora上配置Tex UTF-8 中文系统

TeXLive 2007 CJK Chinese Howto

ubuntu 7.10下搞定Latex CJK

...

Comments(0)

Tags:

2008-03-29 01:03PM

下一个目标:LaTeX与MetaPost

linux

这个Ubuntu弄了一两个星期,现在终于可以干不少事了:
我用它听歌、看电影
用它上网、查资料
用它写程序
用它开FTP、WEB服务
用它聊天,收发邮件
还差什么?
文档,最重要的就是文档,我还要写作业啊
于是昨天用Open Office Dia写了一次,越来越觉得图形化的拖拉选按不能满足我的要求
果然还是可以自己完全精确控制的脚本语言王道,要下定决心学LaTex和MetaPost了...

Comments(0)

Tags:

2008-03-29 12:03PM

安装了新版EVA

linux

装了3月8号的版本后发现有了挺大的改变,终于可以正常地复制粘贴了,选中文字后右键也不会崩溃
不过还是不支持单人聊天时发自定义表情,图标也变成了我讨厌的新版
不知道有没有支持验证码输入……
希望EVA越做越好吧,毕竟Linux下上QQ最好的就是它了...

Comments(0)

Tags:

2008-03-29 01:03AM

[转]Linux必学的60个命令

linux

作者:佚名   文章来源:网络   更新时间:2006-06-16

Linux提供了大量的命令,利用它可以有效地完成大量的工作,如磁盘操作、文件存取、目录操作、进程管理、文件权限设定等。所以,在Linux系统上 工作离不开使用系统提供的命令。要想真正理解Linux系统,就必须从Linux命令学起,通过基础的命令学习可以进一步理解Linux系统。

不同Linux发行版的命令数量不一样,但Linux发行版本最少的命令也有200多个。这里笔者把比较重要和使用频率最多的命令,按照它们在系统中的作用分成下面六个部分一一介绍。

◆ 安装和登录命令:login、shutdown、halt、reboot、install、mount、umount、chsh、exit、last;

◆ 文件处理命令:file、mkdir、grep、dd、find、mv、ls、diff、cat、ln;

◆ 系统管理相关命令:df、top、free、quota、at、lp、adduser、groupadd、kill、crontab;

◆ 网络操作命令:ifconfig、ip、ping、netstat、telnet、ftp、route、rlogin、rcp、finger、mail、 nslookup;

◆ 系统安全相关命令:passwd、su、umask、chgrp、chmod、chown、chattr、sudo ps、who;

◆ 其它命令:tar、unzip、gunzip、unarj、mtools、man、unendcode、uudecode。

本文以Mandrake Linux 9.1(Kenrel 2.4.21)为例,介绍Linux下的安装和登录命令。

  login

1.作用

login的作用是登录系统,它的使用权限是所有用户。

2.格式

login [name][-p ][-h 主机名称]


3.主要参数

-p:通知login保持现在的环境参数。

-h:用来向远程登录的之间传输用户名。

如果选择用命令行模式登录Linux的话,那么看到的第一个Linux命令就是login:。

一般界面是这样的:

Manddrake Linux release 9.1(Bamboo) for i586
renrel 2.4.21-0.13mdk on i686 / tty1
localhost login:root
password:


上面代码中,第一行是Linux发行版本号,第二行是内核版本号和登录的虚拟控制台,我们在第三行输入登录名,按“Enter”键在Password后输入账户密码,即可登录系统。出于安全考虑,输入账户密码时字符不会在屏幕上回显,光标也不移动。

登录后会看到下面这个界面(以超级用户为例):

[root@localhost root]#
last login:Tue ,Nov 18 10:00:55 on vc/1


上面显示的是登录星期、月、日、时间和使用的虚拟控制台。

4.应用技巧

Linux是一个真正的多用户操作系统,可以同时接受多个用户登录,还允许一个用户进行多次登录。这是因为Linux和许多版本的Unix一样,提供了 虚拟控制台的访问方式,允许用户在同一时间从控制台(系统的控制台是与系统直接相连的监视器和键盘)进行多次登录。每个虚拟控制台可以看作是一个独立的工 作站,工作台之间可以切换。虚拟控制台的切换可以通过按下Alt键和一个功能键来实现,通常使用F1-F6 。

例如,用户登录 后,按一下“Alt F2”键,用户就可以看到上面出现的“login:”提示符,说明用户看到了第二个虚拟控制台。然后只需按“Alt F1”键,就可 以回到第一个虚拟控制台。 一个新安装的Linux系统允许用户使用“Alt F1”到“Alt F6”键来访问前六个虚拟控制台。虚拟控制台最有用的是,当一个程序出错造成系统死 锁时,可以切换到其它虚拟控制台工作,关闭这个程序。

  shutdown

1.作用

shutdown命令的作用是关闭计算机,它的使用权限是超级用户。

2.格式

shutdown [-h][-i][-k][-m][-t]


3.重要参数

-t:在改变到其它运行级别之前,告诉init程序多久以后关机。

-k:并不真正关机,只是送警告信号给每位登录者。

-h:关机后关闭电源。

-c:cancel current process取消目前正在执行的关机程序。所以这个选项当然没有时间参数,但是可以输入一个用来解释的讯息,而这信息将会送到每位使用者。

-F:在重启计算机时强迫fsck。

-time:设定关机前的时间。

-m: 将系统改为单用户模式。

-i:关机时显示系统信息。

4.命令说明

shutdown命令可以安全地将系统关机。有些用户会使用直接断掉电源的方式来关闭Linux系统,这是十分危险的。因为Linux与Windows 不同,其后台运行着许多进程,所以强制关机可能会导致进程的数据丢失,使系统处于不稳定的状态,甚至在有的系统中会损坏硬件设备(硬盘)。在系统关机前使 用shutdown命令,系统管理员会通知所有登录的用户系统将要关闭,并且login指令会被冻结,即新的用户不能再登录。

  halt

1.作用

halt命令的作用是关闭系统,它的使用权限是超级用户。

2.格式

halt [-n] [-w] [-d] [-f] [-i] [-p]


3.主要参数说明

-n:防止sync系统调用,它用在用fsck修补根分区之后,以阻止内核用老版本的超级块覆盖修补过的超级块。

-w:并不是真正的重启或关机,只是写wtmp(/var/log/wtmp)纪录。

-f:没有调用shutdown,而强制关机或重启。

-i:关机(或重启)前,关掉所有的网络接口。

-f:强迫关机,不呼叫shutdown这个指令。

-p: 当关机的时候顺便做关闭电源的动作。

-d:关闭系统,但不留下纪录。 

4.命令说明

halt就是调用shutdown -h。halt执行时,杀死应用进程,执行sync(将存于buffer中的资料强制写入硬盘中)系统调用,文件系统写操作完成后就会停止内核。若系统的 运行级别为0或6,则关闭系统;否则以shutdown指令(加上-h参数)来取代。 

  reboot

1.作用

reboot命令的作用是重新启动计算机,它的使用权限是系统管理者。

2.格式

reboot [-n] [-w] [-d] [-f] [-i]


3.主要参数

-n: 在重开机前不做将记忆体资料写回硬盘的动作。

-w: 并不会真的重开机,只是把记录写到/var/log/wtmp文件里。

-d: 不把记录写到/var/log/wtmp文件里(-n这个参数包含了-d)。

-i: 在重开机之前先把所有与网络相关的装置停止。

  install

1.作用

install命令的作用是安装或升级软件或备份数据,它的使用权限是所有用户。

2.格式

(1)install [选项]... 来源 目的地

(2)install [选项]... 来源... 目录

(3)install -d [选项]... 目录...

在前两种格式中,会将<来源>复制至<目的地>或将多个<来源>文件复制至已存在的<目录>,同时设 定权限模式及所有者/所属组。在第三种格式中,会创建所有指定的目录及它们的主目录。长选项必须用的参数在使用短选项时也是必须的。

3.主要参数

--backup[=CONTROL]:为每个已存在的目的地文件进行备份。

-b:类似 --backup,但不接受任何参数。

-c:(此选项不作处理)。

-d,--directory:所有参数都作为目录处理,而且会创建指定目录的所有主目录。

-D:创建<目的地>前的所有主目录,然后将<来源>复制至 <目的地>;在第一种使用格式中有用。

-g,--group=组:自行设定所属组,而不是进程目前的所属组。

-m,--mode=模式:自行设定权限模式 (像chmod),而不是rwxr-xr-x。

-o,--owner=所有者:自行设定所有者 (只适用于超级用户)。

-p,--preserve-timestamps:以<来源>文件的访问/修改时间作为相应的目的地文件的时间属性。

-s,--strip:用strip命令删除symbol table,只适用于第一及第二种使用格式。

-S,--suffix=后缀:自行指定备份文件的<后缀>。

-v,--verbose:处理每个文件/目录时印出名称。

--help:显示此帮助信息并离开。

--version:显示版本信息并离开。

  mount

1.作用

mount命令的作用是加载文件系统,它的用权限是超级用户或/etc/fstab中允许的使用者。

2.格式

mount -a [-fv] [-t vfstype] [-n] [-rw] [-F] device dir


3.主要参数

-h:显示辅助信息。

-v:显示信息,通常和-f用来除错。

-a:将/etc/fstab中定义的所有文件系统挂上。

-F:这个命令通常和-a一起使用,它会为每一个mount的动作产生一个行程负责执行。在系统需要挂上大量NFS文件系统时可以加快加载的速度。

-f:通常用于除错。它会使mount不执行实际挂上的动作,而是模拟整个挂上的过程,通常会和-v一起使用。

-t vfstype:显示被加载文件系统的类型。

-n:一般而言,mount挂上后会在/etc/mtab中写入一笔资料,在系统中没有可写入文件系统的情况下,可以用这个选项取消这个动作。

4.应用技巧

在Linux和Unix系统上,所有文件都是作为一个大型树(以/为根)的一部分访问的。要访问CD-ROM上的文件,需要将CD-ROM设备挂装在文 件树中的某个挂装点。如果发行版安装了自动挂装包,那么这个步骤可自动进行。在Linux中,如果要使用硬盘、光驱等储存设备 ,就得先将它加载,当储存设备挂上了之后,就可以把它当成一个目录来访问。挂上一个设备使用mount命令。 在使用mount这个指令时,至少要先知道下列三种信息:要加载对象的文件系统类型、要加载对象的设备名称及要将设备加载到哪个目录下。

(1)Linux可以识别的文件系统

◆ Windows 95/98常用的FAT 32文件系统:vfat ;

◆ Win NT/2000 的文件系统:ntfs ;

◆ OS/2用的文件系统:hpfs;

◆ Linux用的文件系统:ext2、ext3;

◆ CD-ROM光盘用的文件系统:iso9660。

虽然vfat是指FAT 32系统,但事实上它也兼容FAT 16的文件系统类型。

(2)确定设备的名称

在Linux中,设备名称通常都存在/dev里。这些设备名称的命名都是有规则的,可以用“推理”的方式把设备名称找出来。例如,/dev/hda1这 个IDE设备,hd是Hard Disk(硬盘)的,sd是SCSI Device,fd是Floppy Device(或是Floppy Disk?)。a代表第一个设备,通常IDE接口可以接上4个IDE设备(比如4块硬盘)。所以要识别IDE硬盘的方法分别就是hda、hdb、hdc、 hdd。hda1中的“1”代表hda的第一个硬盘分区 (partition),hda2代表hda的第二主分区,第一个逻辑分区从hda5开始,依此类推。 此外,可以直接检查/var/log/messages文件,在该文件中可以找到计算机开机后系统已辨认出来的设备代号。

(3)查找挂接点

在决定将设备挂接之前,先要查看一下计算机是不是有个/mnt的空目录,该目录就是专门用来当作挂载点(Mount Point)的目录。建议在/mnt里建几个/mnt/cdrom、/mnt/floppy、/mnt/mo等目录,当作目录的专用挂载点。举例而言,如 要挂载下列5个设备,其执行指令可能如下 (假设都是Linux的ext2系统,如果是Windows XX请将ext2改成vfat):

软盘 ===>mount -t ext2 /dev/fd0 /mnt/floppy
cdrom ===>mount -t iso9660 /dev/hdc /mnt/cdrom
SCSI cdrom ===>mount -t iso9660 /dev/sdb /mnt/scdrom
SCSI cdr ===>mount -t iso9660 /dev/sdc /mnt/scdr


不过目前大多数较新的Linux发行版本(包括红旗 Linux、中软Linux、Mandrake Linux等)都可以自动挂装文件系统,但Red Hat Linux除外。

  umount

1.作用

umount命令的作用是卸载一个文件系统,它的使用权限是超级用户或/etc/fstab中允许的使用者。

2.格式

unmount -a [-fFnrsvw] [-t vfstype] [-n] [-rw] [-F] device dir


3.使用说明

umount命令是mount命令的逆操作,它的参数和使用方法和mount命令是一样的。Linux挂装CD-ROM后,会锁定CD—ROM,这样就 不能用CD-ROM面板上的Eject按钮弹出它。但是,当不再需要光盘时,如果已将/cdrom作为符号链接,请使用umount/cdrom来卸装 它。仅当无用户正在使用光盘时,该命令才会成功。该命令包括了将带有当前工作目录当作该光盘中的目录的终端窗口。

  chsh

1.作用

chsh命令的作用是更改使用者shell设定,它的使用权限是所有使用者。

2.格式

chsh [ -s ] [ -list] [ --help ] [ -v ] [ username ]


3.主要参数

-l:显示系统所有Shell类型。

-v:显示Shell版本号。

4.应用技巧

前面介绍了Linux下有多种Shell,一般缺省的是Bash,如果想更换Shell类型可以使用chsh命令。先输入账户密码,然后输入新Shell类型,如果操作正确系统会显示“Shell change”。其界面一般如下:

Changing fihanging shell for cao
Password:
New shell [/bin/bash]: /bin/tcsh


上面代码中,[ ]内是目前使用的Shell。普通用户只能修改自己的Shell,超级用户可以修改全体用户的Shell。要想查询系统提供哪些Shell,可以使用chsh -l 命令。



从图1中可以看到,笔者系统中可以使用的Shell有bash(缺省)、csh、sh、tcsh四种。

  exit

1.作用

exit命令的作用是退出系统,它的使用权限是所有用户。

2.格式

exit

3.参数

exit命令没有参数,运行后退出系统进入登录界面。

  last

1.作用

last命令的作用是显示近期用户或终端的登录情况,它的使用权限是所有用户。通过last命令查看该程序的log,管理员可以获知谁曾经或企图连接系统。

2.格式

1ast[—n][-f file][-t tty] [—h 节点][-I —IP][—1][-y][1D]


3.主要参数

-n:指定输出记录的条数。

-f file:指定用文件file作为查询用的log文件。

-t tty:只显示指定的虚拟控制台上登录情况。

-h 节点:只显示指定的节点上的登录情况。

-i IP:只显示指定的IP上登录的情况。

-1:用IP来显示远端地址。

-y:显示记录的年、月、日。

-ID:知道查询的用户名。

-x:显示系统关闭、用户登录和退出的历史。

  动手练习

上面介绍了Linux安装和登录命令,下面介绍几个实例,动手练习一下刚才讲过的命令。

1.一次运行多个命令

在一个命令行中可以执行多个命令,用分号将各个命令隔开即可,例如:

#last -x;halt


上面代码表示在显示系统关闭、用户登录和退出的历史后关闭计算机。

2.利用mount挂装文件系统访问Windows系统

许多Linux发行版本现在都可以自动加载Vfat分区来访问Windows系统,而Red Hat各个版本都没有自动加载Vfat分区,因此还需要进行手工操作。

mount可以将Windows分区作为Linux的一个“文件”挂接到Linux的一个空文件夹下,从而将Windows的分区和/mnt这个目录联 系起来。因此,只要访问这个文件夹就相当于访问该分区了。首先要在/mnt下建立winc文件夹,在命令提示符下输入下面命令:

#mount -t vfat /dev/hda1 /mnt/winc


即表示将Windows的C分区挂到Liunx的/mnt/winc目录下。这时,在/mnt/winc目录下就可以看到Windows中C盘的内容 了。使用类似的方法可以访问Windows系统的D、E盘。在Linux系统显示Windows的分区一般顺序这样的:hda1为C盘、hda5为D盘、 hda6为E盘……以此类推。上述方法可以查看Windows系统有一个很大的问题,就是Windows中的所有中文文件名或文件夹名全部显示为问号 “?”,而英文却可以正常显示。我们可以通过加入一些参数让它显示中文。还以上面的操作为例,此时输入命令:

#mount -t vfat -o iocharset=cp936 /dev/hda1 /mnt/winc


现在它就可以正常显示中文了。

3.使用mount加挂闪盘上的文件系统

在Linux下使用闪盘非常简单。Linux对USB设备有很好的支持,当插入闪盘后,闪盘被识别为一个SCSI盘,通常输入以下命令:

# mount /dev/sda1 /usb


就能够加挂闪盘上的文件系统。

  小知识

  Linux命令与Shell

所谓Shell,就是命令解释程序,它提供了程序设计接口,可以使用程序来编程。学习Shell对于Linux初学者理解Linux系统是非常重要的。 Linux系统的Shell作为操作系统的外壳,为用户提供了使用操作系统的接口。Shell是命令语言、命令解释程序及程序设计语言的统称,是用户和 Linux内核之间的接口程序。如果把Linux内核想象成一个球体的中心,Shell就是围绕内核的外层。当从Shell或其它程序向Linux传递命 令时,内核会做出相应的反应。Shell在Linux系统的作用和MS DOS下的COMMAND.COM和Windows 95/98 的 explorer.exe相似。Shell虽然不是系统核心的一部分,只是系统核心的一个外延,但它能够调用系统内核的大部分功能。因此,可以说 Shell是Unux/Linux最重要的实用程序。

Linux中的Shell有多种类型,其中最常用的是Bourne Shell(sh)、C Shell(csh)和Korn Shell(ksh)。大多数Linux发行版本缺省的Shell是Bourne Again Shell,它是Bourne Shell的扩展,简称bash,与Bourne Shell完全向后兼容,并且在Bourne Shell的基础上增加了很多特性。bash放在/bin/bash中,可以提供如命令补全、命令编辑和命令历史表等功能。它还包含了很多C Shell和Korn Shell中的优点,有灵活和强大的编程接口,同时又有很友好的用户界面。Linux系统中200多个命令中有40个是bash的内部命令,主要包括 exit、less、lp、kill、 cd、pwd、fc、fg等。...

Comments(0)

Tags:

2008-03-28 09:03AM

[转]Linux网络编程一步一步学-select详解

linux

转自:Linux软件下载源码编程文章资料周立发

select系统调用是用来让我们的程序监视多个文件句柄(file descriptor)的状态变化的。程序会停在select这里等待,直到被监视的文件句柄有某一个或多个发生了状态改变。

文 件在句柄在Linux里很多,如果你man某个函数,在函数返回值部分说到成功后有一个文件句柄被创建的都是的,如man socket可以看到“On success, a file descriptor for the new socket is returned.”而man 2 open可以看到“open() and creat() return the new file descriptor”,其实文件句柄就是一个整数,看socket函数的声明就明白了:

int socket(int domain, int type, int protocol);
当然,我们最熟悉的句柄是0、1、2三个,0是标准输入,1是标准输出,2是标准错误输出。0、1、2是整数表示的,对应的FILE *结构的表示就是stdin、stdout、stderr,0就是stdin,1就是stdout,2就是stderr。
比如下面这两段代码都是从标准输入读入9个字节字符:
#include <stdio.h>
#include <unistd.h>
#include <string.h>
int main(int argc, char ** argv)
{
        char buf[10] = "";
        read(0, buf, 9); /* 从标准输入 0 读入字符 */
        fprintf(stdout, "%s\n", buf); /* 向标准输出 stdout 写字符 */
        return 0;
}
/* **上面和下面的代码都可以用来从标准输入读用户输入的9个字符** */
#include <stdio.h>
#include <unistd.h>
#include <string.h>
int main(int argc, char ** argv)
{
        char buf[10] = "";
        fread(buf, 9, 1, stdin); /* 从标准输入 stdin 读入字符 */
        write(1, buf, strlen(buf));
        return 0;
}
继续上面说的select,就是用来监视某个或某些句柄的状态变化的。select函数原型如下:
int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);
函 数的最后一个参数timeout显然是一个超时时间值,其类型是struct timeval *,即一个struct timeval结构的变量的指针,所以我们在程序里要申明一个struct timeval tv;然后把变量tv的地址&tv传递给select函数。struct timeval结构如下:
struct timeval {
             long    tv_sec;         /* seconds */
             long    tv_usec;        /* microseconds */
         };
第2、3、4三个参数是一样的类型: fd_set *,即我们在程序里要申明几个fd_set类型的变量,比如rdfds, wtfds, exfds,然后把这个变量的地址&rdfds, &wtfds, &exfds 传递给select函数。这三个参数都是一个句柄的集合,第一个rdfds是用来保存这样的句柄的:当句柄的状态变成可读的时系统就会告诉select函 数返回,同理第二个wtfds是指有句柄状态变成可写的时系统就会告诉select函数返回,同理第三个参数exfds是特殊情况,即句柄上有特殊情况发 生时系统会告诉select函数返回。特殊情况比如对方通过一个socket句柄发来了紧急数据。如果我们程序里只想检测某个socket是否有数据可 读,我们可以这样:
fd_set rdfds; /* 先申明一个 fd_set 集合来保存我们要检测的 socket句柄 */
struct timeval tv; /* 申明一个时间变量来保存时间 */
int ret; /* 保存返回值 */
FD_ZERO(&rdfds); /* 用select函数之前先把集合清零 */
FD_SET(socket, &rdfds); /* 把要检测的句柄socket加入到集合里 */
tv.tv_sec = 1;
tv.tv_usec = 500; /* 设置select等待的最大时间为1秒加500毫秒 */
ret = select(socket 1, &rdfds, NULL, NULL, &tv); /* 检测我们上面设置到集合rdfds里的句柄是否有可读信息 */
if(ret < 0) perror("select");/* 这说明select函数出错 */
else if(ret == 0) printf("超时\n"); /* 说明在我们设定的时间值1秒加500毫秒的时间内,socket的状态没有发生变化 */
else { /* 说明等待时间还未到1秒加500毫秒,socket的状态发生了变化 */
    printf("ret=%d\n", ret); /* ret这个返回值记录了发生状态变化的句柄的数目,由于我们只监视了socket这一个句柄,所以这里一定ret=1,如果同时有多个句柄发生变化返回的就是句柄的总和了 */
    /* 这里我们就应该从socket这个句柄里读取数据了,因为select函数已经告诉我们这个句柄里有数据可读 */
    if(FD_ISSET(socket, &rdfds)) { /* 先判断一下socket这外被监视的句柄是否真的变成可读的了 */
        /* 读取socket句柄里的数据 */
        recv(...);
    }
}
注意select函数的第一个参数,是所有加入集合的句柄值的最大那个值还要加1。比如我们创建了3个句柄:
/************关于本文档********************************************
*filename: Linux网络编程一步一步学-select详解
*purpose: 详细说明select的用法
*wrote by: zhoulifa(zhoulifa@163.com) 周立发(http://zhoulifa.bokee.com)
Linux爱好者 Linux知识传播者 SOHO族 开发者 最擅长C语言
*date time:2007-02-03 19:40
*Note: 任何人可以任意复制代码并运用这些文档,当然包括你的商业用途
* 但请遵循GPL
*Thanks to:Google
*Hope:希望越来越多的人贡献自己的力量,为科学技术发展出力
* 科技站在巨人的肩膀上进步更快!感谢有开源前辈的贡献!
*********************************************************************/
int sa, sb, sc;
sa = socket(...); /* 分别创建3个句柄并连接到服务器上 */
connect(sa,...);
sb = socket(...);
connect(sb,...);
sc = socket(...);
connect(sc,...);

FD_SET(sa, &rdfds);/* 分别把3个句柄加入读监视集合里去 */
FD_SET(sb, &rdfds);
FD_SET(sc, &rdfds);
在使用select函数之前,一定要找到3个句柄中的最大值是哪个,我们一般定义一个变量来保存最大值,取得最大socket值如下:
int maxfd = 0;
if(sa > maxfd) maxfd = sa;
if(sb > maxfd) maxfd = sb;
if(sc > maxfd) maxfd = sc;
然后调用select函数:
ret = select(maxfd 1, &rdfds, NULL, NULL, &tv); /* 注意是最大值还要加1 */
同样的道理,如果我们要检测用户是否按了键盘进行输入,我们就应该把标准输入0这个句柄放到select里来检测,如下:
FD_ZERO(&rdfds);
FD_SET(0, &rdfds);
tv.tv_sec = 1;
tv.tv_usec = 0;
ret = select(1, &rdfds, NULL, NULL, &tv); /* 注意是最大值还要加1 */
if(ret < 0) perror("select");/* 出错 */
else if(ret == 0) printf("超时\n"); /* 在我们设定的时间tv内,用户没有按键盘 */
else { /* 用户有按键盘,要读取用户的输入 */
    scanf("%s", buf);
}
详细编程请参见:
Linux网络编程一步一步学-异步通讯聊天程序select...

Comments(0)

Tags:

2008-03-27 08:03PM

[转]C 程序文档生成器介绍(doxygen)

c

程序文档,曾经是程序员的一个头痛问题。写一个程序文档,比较花时间,但不是很难;麻烦的是当程序修改后,程序文档也要跟着同步更新,否则文档和程序就要脱节,文档也就变成没用的东西了。

好在有许多好用的文档生成器来解决这个问题。目前比较流行的C 文档生成器是doxygen。
本文就简单的介绍一下doxygen的文档注释方法,以供初学者参考:

1. 模块定义(单独显示一页)

/*
 * @defgroup 模块名 模块的说明文字
 * @{
 */
 
 ... 定义的内容 ...
 
/** @} */ // 模块结尾
 
2. 分组定义(在一页内分组显示)
/*
 * @name 分组说明文字
 * @{
 */
 
 ... 定义的内容 ...
 
/** @} */
 
3. 变量、宏定义、类型定义简要说明
/** 简要说明文字 */
#define FLOAT float
 
/** @brief 简要说明文字(在前面加 @brief 是标准格式) */
#define MIN_UINT 0
 
/*
 * 分行的简要说明 \n
 *  这是第二行的简要说明
 */
int b;
 
4. 函数说明
/*
 * 简要的函数说明文字 
 *  @param [in] param1 参数1说明
 *  @param [out] param2 参数2说明
 *  @return 返回值说明
 */
int func(int param1, int param2);
 
/*
 * 打开文件 \n
 *  文件打开成功后,必须使用 ::CloseFile 函数关闭。
 *  @param[in] file_name 文件名字符串
 *  @param[in] file_mode 文件打开模式字符串,可以由以下几个模块组合而成:
 *  - r 读取
 *  - w 可写
 *  - a 添加
 *  - t 文本模式(不能与 b 联用)
 *  - b 二进制模式(不能与 t 联用)
 *  @return 返回文件编号
 *  - -1 表示打开文件失败
 
 *  @note 文件打开成功后,必须使用 ::CloseFile 函数关闭
 *  @par 示例:
 *  @code
    // 用文本只读方式打开文件
    int f = OpenFile("d:\test.txt", "rt");
 *  @endcode
 
 *  @see ::ReadFile ::WriteFile ::CloseFile
 *  @deprecated 由于特殊的原因,这个函数可能会在将来的版本中取消。
 */
int OpenFile(const char* file_name, const char* file_mode);
 
5. 枚举类型定义
/** 枚举常量 */
typedef enum TDayOfWeek
{
SUN = 0, /**<  星期天(注意,要以 “<” 小于号开头) */
MON = 1, /**<  星期一 */
TUE = 2, /**<  星期二 */
WED = 3, /**<  星期三 */
THU = 4, /**<  星期四 */
FRI = 5, /**<  星期五 */
SAT = 6  /**<  星期六 */
}
/** 定义类型 TEnumDayOfWeek */
TEnumDayOfWeek;  
  
6. 项目符号标记
  /* 
   *  A list of events:
   *    - mouse events
   *         -# mouse move event
   *         -# mouse click event\n
   *            More info about the click event.
   *         -# mouse double click event
   *    - keyboard events
   *         -# key down event
   *         -# key up event
   *
   *  More text here.
   */
 

结果为:

A list of events:

  • mouse events
    1. mouse move event
    2. mouse click event
      More info about the click event.
    3. mouse double click event
  • keyboard events
    1. key down event
    2. key up event

More text here.

代码示范:

/**//*
 * @defgroup EXAMPLES 自动注释文档范例
 * @author  沐枫
 * @version 1.0
 * @date    2004-2005
 * @{
 */

/**//*
 * @name 文件名常量
 * @{
 */
/**//** 日志文件名 */
#define LOG_FILENAME "d:\log\debug.log"
/**//** 数据文件名 */
#define DATA_FILENAME "d:\data\detail.dat"
/**//** 存档文件名 */
#define BAK_FILENAME "d:\data\backup.dat"
/**//** @}*/ // 文件名常量
/**//*
 * @name 系统状态常量
 *  @{
 */
 
/**//** 正常状态 */
#define SYS_NORMAL 0
/**//** 故障状态 */
#define SYS_FAULT 1
/**//** 警告状态 */
#define SYS_WARNNING 2
/**//** @}*/ // 系统状态常量
/**//** 枚举常量 */
typedef enum TDayOfWeek
{
        SUN = 0, /**//**< 星期天 */
        MON = 1, /**//**< 星期一 */
        TUE = 2, /**//**< 星期二 */
        WED = 3, /**//**< 星期三 */
        THU = 4, /**//**< 星期四 */
        FRI = 5, /**//**< 星期五 */
        SAT = 6  /**//**< 星期六 */
}
/**//** 定义类型 TEnumDayOfWeek */
TEnumDayOfWeek; 
/**//** 定义类型 PEnumDayOfWeek */
typedef TEnumDayOfWeek* PEnumDayOfWeek;
/**//** 定义枚举变量 enum1 */
TEnumDayOfWeek enum1;       
/**//** 定义枚举指针变量 enum2 */
PEnumDayOfWeek p_enum2;
/**//*
 * @defgroup FileUtils 文件操作函数
 * @{
 */
/**//*
 * 打开文件 \n
 *  文件打开成功后,必须使用 ::CloseFile 函数关闭。
 *  @param[in] file_name 文件名字符串
 *  @param[in] file_mode 文件打开模式字符串,可以由以下几个模块组合而成:
 *  - r 读取
 *  - w 可写
 *  - a 添加
 *  - t 文本模式(不能与 b 联用)
 *  - b 二进制模式(不能与 t 联用)
 *  @return 返回文件编号
 *  - -1 表示打开文件失败
 
 *  @note 文件打开成功后,必须使用 ::CloseFile 函数关闭
 *  @par 示例:
 *  @code
    // 用文本只读方式打开文件
    int f = OpenFile("d:\test.txt", "rt");
 *  @endcode
 
 *  @see ::ReadFile ::WriteFile ::CloseFile
 *  @deprecated 由于特殊的原因,这个函数可能会在将来的版本中取消。
 */
int OpenFile(const char* file_name, const char* file_mode);
/**//*
 * 读取文件
 *  @param[in] file 文件编号,参见:::OpenFile
 *  @param[out] buffer 用于存放读取的文件内容
 *  @param[in] len 需要读取的文件长度
 *  @return 返回读取文件的长度
 *  - -1 表示读取文件失败
 
 *  @pre \e file 变量必须使用 ::OpenFile 返回值
 *  @pre \e buffer 不能为 NULL
 *  @see ::OpenFile ::WriteFile ::CloseFile
 */
int ReadFile(int file, char* buffer, int len);
/**//*
 * 写入文件
 *  @param[in] file 文件编号,参见:::OpenFile
 *  @param[in] buffer 用于存放将要写入的文件内容
 *  @param[in] len 需要写入的文件长度
 *  @return 返回写入的长度
 *  - -1 表示写入文件失败
 
 *  @pre \e file 变量必须使用 ::OpenFile 返回值
 *  @see ::OpenFile ::ReadFile ::CloseFile
 */
int WriteFile(int file, const char* buffer, int len);
/**//*
 * 关闭文件
 *  @param file 文件编号,参见:::OpenFile
 *  @retval 0  为成功
 *  @retval -1 表示失败
 
 *  @see ::OpenFile ::WriteFile ::ReadFile
 *  @deprecated 由于特殊的原因,这个函数可能会在将来的版本中取消。
 */
int CloseFile(int file);
/**//** @}*/ // 文件操作函数
/**//** @}*/ // 自动注释文档范例

生成的chm文档截图:



...

Comments(0)

Tags:

Copyright © 2007

Webdesign, tvorba www stránek

Valid XHTML 1.1