理解CCSID,LANGID对系统内码的影响Windows系统

时间:2022-05-14 18:02:45 其他范文 收藏本文 下载本文

理解CCSID,LANGID对系统内码的影响Windows系统(共6篇)由网友“nnjxfh”投稿提供,以下是小编整理过的理解CCSID,LANGID对系统内码的影响Windows系统,希望能够帮助到大家。

理解CCSID,LANGID对系统内码的影响Windows系统

篇1:理解CCSID,LANGID对系统内码的影响Windows系统

论坛里一直有朋友困惑于总是出现系统内一些程序乱码等问题,这些都是由于代码页转换问题. 我这里有篇文章就是详细介绍这个的,作者是IBM的陈兵.iseries技术指南这本书的附录里面也有该部分,有书的朋友可以拿书看看. 希望对大家有用 ==========================

论坛里一直有朋友困惑于总是出现系统内一些程序乱码等问题,这些都是由于代码页转换问题.

我这里有篇文章就是详细介绍这个的,作者是IBM的陈兵. 这本书的附录里面也有该部分,有书的朋友可以拿书看看.

希望对大家有用

===============================================

值得注意的是,在这里我们使用了“简体中文”这四个字,是为了对应在iSeries上、语言编码为2989的Simplified Chinese,也就是为了对应那些与简体中文相关的编码标准,它决不意味着我们系统仅仅支持简体字。

我们知道,当一个作业被启动的时候,系统会为它确定各项属性的取值,其中包括:

 作业的语言代码

 作业的CCSID

 作业的缺省CCSID

通常,前两项属性都会去参照与该作业相关的用户简要表(User Profile),而用户简要表中的上述参数又往往会进一步去参照系统值。对于作业的缺省CCSID,系统则会依据下面的条件判断加以确定:

 当作业的CCSID不为65535时,作业的缺省CCSID即等于作业的CCSID;

 当作业的CCSID为65535时,作业的缺省CCSID会依据作业的语言代码来确定;

由上一节我们可以知道,当我们选择DBCS大小写英文(编号为2984)作为系统的主语言时,系统值中的语言代码会被设定为美国英语ENU。用户登录所产生的作业,其各项属性会以美国英语为基础,特别是会将37作为作业的缺省CCSID。而当我们选择简体中文(编号为2989)作为系统的主语言时,系统值中的语言代码会被设定为简体中文CHS。用户登录所产生的作业,其各项属性会以简体中文为基础,特别是会将935或1388作为作业的缺省CCSID。

了解作业的缺省CCSID很重要,因为当作业要创建任何具有CCSID属性的对象的时候,系统会参照当前作业的缺省CCSID,为该对象赋予相应的CCSID取值。

目前在大陆的iSeries用户,由于其用户简要表中的设置不同,其登录所产生的作业,针对上述三项属性的取值也会有所不同。稍加留意便可发现,以下五种情况最为常见:

用户实例 用户简要表中的语言代码 用户简要表中的CCSID 作业的语言

代码 作业的CCSID 作业的缺省CCSID

USER01 ENU 37 ENU 37 37

USER02 CHS 935 CHS 935 935

USER03 CHS 1388 CHS 1388 1388

USER11 ENU 65535 ENU 65535 37

USER12 CHS 65535 CHS 65535 935

考察以用户USER01,或用户USER11登录系统所产生的作业,它们都将以37作为作业的缺省CCSID。由于37是一种单字节的CCSID,因此以37作为缺省CCSID的作业是无法完全正确地处理双字节字符的。比如,用户在利用如下的DDS源文件编译物理文件的时候,

0 ...+... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8

A* CUSTOMER INFORMATION TABLE

A

A          R CUSTOMER                  TEXT('CUST INFO')

A            CUSTID        12A         TEXT('CUSTOMER ID')

A            CUSTNAME      10O         TEXT('CUSTOMER NAME')

A            ADDRESS       10O         TEXT('CUSTOMER ADDRESS')

或者在利用STRSQL运行如下的建表语句的时候,

CREATE TABLE CRMINFO/CUSTOMER

(

CUSTID   CHAR (12 ) FOR SBCS  DATA NOT NULL,

CUSTNAME CHAR (10 ) FOR MIXED DATA NOT NULL,

ADDRESS  CHAR (10 ) FOR MIXED DATA NOT NULL

);

都会生成一个以937作为CCSID的对象。其中,单字节字段CUSTID的CCSID为37,双字节字段CUSTNAME和ADDRESS的CCSID皆为937。在一个以37为缺省CCSID的作业环境中,系统为什么会以937作为这些物理文件或数据库表当中的双字节字段的CCSID呢?原因很简单,对于物理文件或数据库表中的那些双字节字段,以37作为缺省CCSID的作业无法确定它们应该属于日文、韩文、简体中文、抑或繁体中文,也就无法为这些字段标上正确的CCSID。在这种情况下,系统会给这些双字节字段都标上937,权当作为它们的CCSID,进而937也成为了这些物理文件或数据库表的CCSID。糟糕的是,937是繁体中文的主机代码页。这样一来,一旦这些物理文件被用来存放简体中文字符,那么,含有简体中文字符的字段在文件传输当中往往就会出现乱码。

正确的方法应是在系统安装完毕后,将相关的系统值设置成针对简体中文的取值,特别是将系统值QLANGID设置成CHS,将系统值QCCSID设置成935或1388。这样就可使作业的CCSID和作业的缺省CCSID都变为935或1388。由于935和1388都是针对简体中文的混合字节CCSID,在一个以935或1388作为缺省CCSID的作业环境中,当我们编译那些含有双字节字段的物理文件的时候,或是当我们创建那些含有双字节字段的数据库表的时候,系统就会生成一个以935或1388作为CCSID的对象,并给那些双字节字段都标上正确的CCSID。在上面的例子中,单字节字段CUSTID的CCSID应为836或13124,双字节字段CUSTNAME和ADDRESS的CCSID应为935或1388。

至此,你也许还会问,935和1388之间又有什么差异呢?问得好。

虽然935和1388都是针对简体中文的混合字节CCSID,但是它们在字汇方面,935的双字节代码页837代表着GB2312标准中的双字节字符部分,俗称“GB码”;而1388的双字节代码页4933则代表着GB18030标准中的双字节字符部分,俗称“GBK码”。我们知道,GB2312是汉字编码的基本集,共收录近七千个常用汉字。然而,随着计算机应用的普及,人们越来越多地会遇到需要输入或显示繁体字和某些冷僻汉字的情况。就拿客户的姓名来说,遇上在GB2312标准中找不到的汉字是常有的事。为了包容这样的汉字,使之在显示和传输过程中不出现差错,我们就应该使用1388作为那些用于存放中文字符的物理文件、数据库表及其字段的CCSID。

935和1388都是在iSeries端、基于EBCDIC编码体系的代码页。在PC端,与935和1388分别对应的是1381和1386。它们是基于ASCII编码体系的代码页。同样的,在字汇方面,1381的双字节代码页1380代表着“GB码”;而1386的双字节代码页1385则代表着“GBK码”。

关于GBK码,也就是GB18030的双字节字符部分,下表针对着1386编码和1388编码分别给出了其详细的编码分布:

类别 简称 1386编码 1388编码 码位数 字符数 备注

符号

标准

区 双字节1区 A1A1-A9FE 846 718 符号(GB2312)

双字节5区 A840-A9A0 192 166 符号

小计 1038 883

汉字

区 双字节2区 B0A1-F7FE 48A0-6C9F 6768 6763 汉字(GB2312)

双字节3区 8140-A0FE 8141-A181 6080 6080 汉字

双字节4区 AA40-FEA0 A182-CEA6 8160 8160 汉字

小计 21008 21003

用户

自定

义区 双字节用户1区 AAA1-AFFE 7641-78FD 564

双字节用户2区 F8A1-FEFE 7941-7C9F 658

双字节用户3区 A140-A7A0 7C80-804E 672

小计 1894

总计 23940 21886

很明显,想要使物理文件或数据库表在显示和传输过程中能够正确处理简体中文字符,其文件以及字段的CCSID,往往起着最为关键的作用。除了935和1388以外,现在越来越多的应用,选择使用UCS-2,也就是13488,作为文件及其双字节字段的CCSID。这被证明是明智的选择,它将使在iSeries上的软件国际化更趋便捷。比如,SAP R/3系统在iSeries上的双字节版本,就是采用了UCS-2,其上万张数据库表的CCSID都是13488,其间的简体中文字符皆以UCS-2编码存放。

我们可以利用如下的DDS源文件编译含有UCS-2字段的物理文件:

0 ...+... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8

A* CUSTOMER INFORMATION TABLE

A

A          R CUSTOMER                  TEXT('CUST INFO')

A            CUSTID        12G         CCSID(13488)

A            CUSTNAME      10G         CCSID(13488)

A            ADDRESS       10G         CCSID(13488)

或是利用STRSQL运行如下的建表语句创建含有UCS-2字段的数据库表:

CREATE TABLE CRMINFO/CUSTOMER

(

CUSTID   GRAPHIC (12 ) CCSID 13488  NOT NULL,

CUSTNAME GRAPHIC (10 ) CCSID 13488  NOT NULL,

ADDRESS  GRAPHIC (10 ) CCSID 13488  NOT NULL

);

它们都将生成一个以13488作为CCSID的对象,其中的每个字段都被标上CCSID13488,

在i5/OS,也就是OS/400 V5R3当中,又增加了对以UTF-8(代码页1208)和UTF-16(代码页1200)作为字段编码方式的支持。

我们可以利用如下的DDS源文件分别编译含有UTF-8和UTF-16字段的物理文件:

0 ...+... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8

A* CUSTOMER INFORMATION TABLE

A

A          R CUSTOMER                  TEXT('CUST INFO')

A            CUSTID        12A         CCSID(1208)

A            CUSTNAME      20A         CCSID(1208)

A            ADDRESS       20A         CCSID(1208)

0 ...+... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8

A* CUSTOMER INFORMATION TABLE

A

A          R CUSTOMER                  TEXT('CUST INFO')

A            CUSTID        12G         CCSID(1200)

A            CUSTNAME      10G         CCSID(1200)

A            ADDRESS       10G         CCSID(1200)

或是利用STRSQL运行如下的建表语句分别创建含有UTF-8和UTF-16字段的数据库表:

CREATE TABLE CRMINFO/CUSTOMER

(

CUSTID   CHAR (12 ) CCSID 1208  NOT NULL,

CUSTNAME CHAR (20 ) CCSID 1208  NOT NULL,

ADDRESS  CHAR (20 ) CCSID 1208  NOT NULL

);

CREATE TABLE CRMINFO/CUSTOMER

(

CUSTID   GRAPHIC (12 ) CCSID 1200 NOT NULL,

CUSTNAME GRAPHIC (10 ) CCSID 1200 NOT NULL,

ADDRESS  GRAPHIC (10 ) CCSID 1200 NOT NULL

);

它们将分别生成一个以1208或1200作为CCSID的对象,其中的每个字段都被标上相应的CCSID。

在这里,我们为了简单,所以对文件中的所有双字节字段都采用了同一种编码方式。其实,在一个文件中,字段与字段的编码方式完全可以互不相同。在这种情况下,文件本身的CCSID将变得不再重要。

要了解文件及其字段的CCSID信息,可以通过键入DSPFD和DSPFFD命令获得。另一方面,要了解文件的编码内容,则可以通过键入DSPPFM命令并按F10获得。

CCSID作为文件和字段的标签,如果它和实际存放的编码内容不相一致,那么这个文件就将被视作不符合规范的文件。具体地,当我们见到针对简体中文的文件或字段出现37或937这样的CCSID,即表明这是不符合规范的文件,这样的文件在传输过程中极有可能产生乱码。解决的办法,应该首先考虑创建符合规范的文件,也就是文件及其字段应具有针对简体中文的CCSID,如935、1388、13488、1200、1208等等。

然而在实践中,很有可能用户的数据库已经建立,不符合规范的文件很多,其中可能含有很多数据,其上还可能建有若干逻辑文件或数据库索引和视图。遇到这样的情况,就需要加以分析,结合多种因素,寻求最适合最有效最经济的解决方案。一般而言,通过CHGPF命令可以为多数的物理文件和数据库表标上正确的CCSID,而通过ALTER TABLE语句更可以进一步为多数的字段标上正确的CCSID。

至此,我们可以为目前在大陆的iSeries用户罗列几种其经常遇到的文件与字段的CCSID。同样,稍加留意便可发现,我们最有可能遇到的是以下九种情况:

文件实例 文件与字段的CCSID 字段类型 是否适合存放简体中文字符

FILE00 37 CHAR 不适合,因为37是单字节CCSID

FILE01 836 CHAR 不适合,因为836是单字节CCSID

FILE02 65535 CHAR 一般不适合,但要视情况而定

FILE10 935 CHAR 适合,但不适合存放繁体字或冷僻汉字

FILE11 937 CHAR 不适合,因为937针对的是繁体中文

FILE12 1388 CHAR 适合

FILE20 13488 GRAPHIC 适合

FILE21 1200 GRAPHIC 适合

FILE22 1208 CHAR 适合

bpcsusr 回复于:-05-18 08:13:54不错.

xuguopeng 回复于:2005-05-18 08:49:488错

PS: 居士你有电子版的? 别告诉我你是照着书手敲上来的~~~

胖有型 回复于:2005-05-18 10:31:31居士老大提供的总是精华!

学习中。。。。。

居士 回复于:2005-05-18 16:11:13哈哈, 我没有这么大的精力自己敲出来的

是电子版的.

tomroom 回复于:2005-05-18 17:04:11那里有下载电子版呀? 我公司现在的系统值都是错误的,怎么安全的修改呀?

RobinL 回复于:2005-05-19 08:43:38强烈要求老大把他的电子版《iseries技术指南》贡献出来,虽然有点无理.......

michael9406 回复于:2005-05-19 08:49:09电子版一般有版权的,当然不便共享了。。要不然 he he ... jushi就麻烦了。

excuse 回复于:2005-05-19 11:00:36也说一点关于CCSID的问题,工作当中发现如果PF的CCSID不是935,就连DDS定义变量时REF都会有问题,编译DSPF时,会不认这个屏幕变量,认为这个参考变量不可译,而CHGPF CCSID为935就OK。

请各位大侠原谅,以上我所说的,跟大家谈大问题可能没有什么关联,

(因为我是完全自学,从未接受过任何培训,)SO 只能谈谈在工作中的心得,还比较浅显,只是希望对遇到同样问题的战友们有些帮助。

tomroom 回复于:2005-05-19 11:03:38发一个电子版给我吧 zhangli_sunshine@hotmail.com

old400 回复于:2005-05-19 12:19:31好,明白了一些。

居士 回复于:2005-05-19 12:52:11这个电子版的确实不太方便发给大家

建议大家去拿来,好好的把附录部分看看,里面详细的说明了系统的代码转换的原理,看后一定会有所收获的.

tomroom 回复于:2005-05-19 13:16:18谢谢居士!还是去当当买一本,25¥

原文转自:www.ltesting.net

篇2:........Windows系统

........

CNL 回复于:-10-21 16:28:36谢谢共享,需要的快看啦!

AnEagle 回复于:2004-10-27 17:21:25具体的实施步骤和分析见“濉溪县农信联社业务网主机系统性能优化实施方案”

楼主太幽默了,在哪里找到的?

zhaobincn 回复于:2004-11-07 02:26:00SKKEEP兄弟 你已收藏完了吧

zhyesno 回复于:2004-11-07 08:44:29呵呵,收藏一下,

........Windows系统

。。:)

原文转自:www.ltesting.net

篇3:理解/proc文件系统Windows系统

(这个是,希望给大家提供帮助,更好地理解/proc文件系统) 不只一次的有人问我关于/proc文件系统,那是什么,那些巨大的文件在那里做什么?我可以删除它们吗?本文将详细介绍/proc文件系统,描述一些工具,你可以通过这些工具领略/proc的威力,最后有一

(这个是转贴,希望给大家提供帮助,更好地理解/proc文件系统)

不只一次的有人问我关于/proc文件系统,那是什么,那些巨大的文件在那里做什么?我可以删除它们吗?本文将详细介绍/proc文件系统,描述一些工具,你可以通过这些工具领略/proc的威力。最后有一个例子程序,演示了系统管理员如何与/proc交互。

◆ 介绍/proc

在过去那些糟糕的日子里,只能通过直接访问内核内存(/dev/kmem)获取进程数据,比如运行ps(1)命令时。为了实现这种访问,需要超级用户权限,而且步骤相当复杂。Sun公司从UNIXSVR4开始解决了进程数据访问问题,现在,可以简单地通过/proc访问进程数据。

/proc文件系统不是普通意义上的文件系统,它是一个到运行中进程地址空间的访问接口。通过/proc,可以用标准Unix系统调用(比如open、read()、write()、ioctl()等等)访问进程地址空间。事实上,Solaris ps(1)命令正是利用/proc获取进程状态。

S (l) 进程状态:

O    正在运行

S    休眠: 进程正在等待某个事件发生/完成

R    可运行: 进程位于运行队列中

Z    僵尸状态:  进程结束了,但是其父进程未处理SIGCHLD信号

T    进程暂停: 可能是任务控制信号所致,或者正在被

跟踪调试

/proc下的大文件对应运行中进程的地址空间,不是标准Unix文件。事实上每个文件名对应运行中进程的PID,文件属主、属组对应进程拥有者的real-uid和primary-gid。权限控制与普通Unix文件一样。文件大小是最令人迷惑的地方,事实上相当好理解,对应进程内存映像大小,并不真正占用硬盘空间,所以你不必担心空间浪费的问题。不要企图删除这些文件!观察图A中列举的/proc例子:

--------------------------------------------------------------------------

$ ls -l /proc

total 43384

-rw-------   1 root     root           0 Apr  2 20:07 00000

-rw-------   1 root     root      393216 Apr  2 20:07 00001

-rw-------   1 root     root           0 Apr  2 20:07 00002

-rw-------   1 root     root           0 Apr  2 20:07 00003

-rw-------   1 root     root     1695744 Apr  2 20:07 00081

-rw-------   1 root     root     1597440 Apr  2 20:07 00083

-rw-------   1 root     root     1777664 Apr  2 20:08 00096

-rw-------   1 root     root     1683456 Apr  2 20:08 00099

-rw-------   1 root     root     1589248 Apr  2 20:08 00101

-rw-------   1 root     root     1445888 Apr  2 20:08 00116

-rw-------   1 root     root     1404928 Apr  2 20:08 00126

-rw-------   1 root     root      798720 Apr  2 20:08 00135

-rw-------   1 root     root     1368064 Apr  2 20:08 00195

-rw-------   1 root     root     1585152 Apr  2 20:08 00197

-rw-------   1 root     root     1368064 Apr  2 20:08 00200

-rw-------   1 root     other     225280 Apr  2 20:08 00201

-rw-------   1 root     root     1454080 Apr  2 20:08 00203

-rw-------   1 root     root     1519616 Apr  2 20:14 00243

-rw-------   1 rthomas  wheel    1499136 Apr  2 20:14 00245

-rw-------   1 rthomas  wheel     806912 Apr  2 20:16 00261

$

图A: /proc例子

--------------------------------------------------------------------------

操作/proc下文件的方式和操作普通Unix文件一样,可以使用所有你熟悉的系统调用,包括ioctl()。在内核中,针对/proc下文件的vnode操作被转向procfs。这意味着操作vnode的系统调用(比如lookuppn())实际上最终转向procfs-savvy系统调用(比如prlookup())。

◆ /proc能告诉我什么

Solaris下使用/proc的工具相当完善,位于/usr/proc/bin目录中。这些工具提供了一种访问任意指定进程临界数据的简捷办法。比如,想知道一个进程已经打开了多少文件,你可以使用crash(1M)(见鬼,我不会),但是你是root吗?不必担心,可以用/usr/proc/bin/pfiles获取这种信息,图B演示了pfiles(1)命令的使用:

--------------------------------------------------------------------------

[scz@ /export/home/scz]> ps

PID TTY      TIME CMD

637 pts/3    0:00 bash

[scz@ /export/home/scz]> pfiles 637

637:    -bash

Current rlimit: 64 file descriptors

0: S_IFCHR mode:0620 dev:151,0 ino:196787 uid:500 gid:7 rdev:24,3

O_RDWR

1: S_IFCHR mode:0620 dev:151,0 ino:196787 uid:500 gid:7 rdev:24,3

O_RDWR

2: S_IFCHR mode:0620 dev:151,0 ino:196787 uid:500 gid:7 rdev:24,3

O_RDWR

3: S_IFDOOR mode:0444 dev:191,0 ino:1618164880 uid:0 gid:0 size:0

O_RDONLY|O_LARGEFILE FD_CLOEXEC  door to nscd[213]

63: S_IFCHR mode:0620 dev:151,0 ino:196787 uid:500 gid:7 rdev:24,3

O_RDWR FD_CLOEXEC

[scz@ /export/home/scz]>

图B: 使用pfiles(1)命令

--------------------------------------------------------------------------

正如上面演示的,/usr/proc/bin下的命令使用很简单,只需要在命令行上指定PID。然而,留心权限许可设置,与所有普通Unix文件一样,你无权访问那些权限设置上禁止访问的指定PID的进程数据。

花点事件看看proc(1)手册页,熟悉其中介绍的命令,你将学会列举指定进程相关的库、进程信号设置、进程信任设置,你甚至可以暂停、重启进程,

◆ 编写/proc工具

/proc的魅力在于它包含了你可能想知道的关于一个进程的任何信息,你只需要简单地从中获取。/usr/include/sys/procfs.h文件中定义了两个结构,prstatus和prpsinfo,从中可以获取指定进程的很多信息。下面是个例子,开发者想知道他的应用程序究竟占用了多少内存。简单!ls /proc就可以知道了。但是,他还想知道更多细节,他需要知道总的映像大小、常驻部分的大小、堆区(heap)大小、栈区(stack)大小。此外,他希望能够定期跟踪这些数据信息,类似vmstat(1M)那种方式。如上所述,听起来象是一个令人生畏的任务。

译者: Solaris 2.6开始这两个结构定义在/usr/include/sys/old_procfs.h文件中

然而,通过使用/proc文件系统,我们可以使这项编程挑战变得容易些。我们写的这个工具称做memlook,将显示指定PID对应的内存统计信息。此外,可以在命令行上指定一个时间间隔,以便定期重新检测内存利用信息。图C演示了一次简单的输出:

--------------------------------------------------------------------------

$ memlook 245

PID     IMAGE           RSS             HEAP            STACK

245     1499136         1044480         24581           8192

$

图C: memlook的输出举例

--------------------------------------------------------------------------

下面是memlook.c的源代码

--------------------------------------------------------------------------

/*

* @(#)memlook.c 1.0 10 Nov 

* Robert Owen Thomas robt@cymru.com

* memlook.c -- A process memory utilization reporting tool.

*

* gclearcase/“ target=”_blank“ >cc-Wall -O3 -o memlook memlook.c

*/

#pragma ident ”@(#)memlook.c 1.0 10 Nov 1997 Robert Owen Thomas robt@cymru.com“

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

int counter = 10;

int  showUsage ( const char * );

void getInfo   ( int, int );

int main ( int argc, char * argv[] )

{

int  fd, pid, timeloop = 0;

char pidpath[BUFSIZ];  /* /usr/include/stdio.h: #define BUFSIZ 1024 */

switch ( argc )

{

case 2:

break;

case 3:

timeloop = atoi( argv[2] );

break;

default:

showUsage( argv[0] );

break;

}  /* end of switch */

pid = atoi( argv[1] );

sprintf( pidpath, ”/proc/%-d“, pid );  /* -表示向左靠 */

if ( ( fd = open( pidpath, O_RDONLY ) ) < 0 )

{

perror( pidpath );

exit( 1 );

}

if ( 0 < timeloop )

{

for ( ; ; )

{

getInfo( fd, pid );

sleep( timeloop );

}

}

getInfo( fd, pid );

close( fd );

exit( 0 );

}  /* end of main */

int showUsage ( const char * progname )

{

fprintf( stderr, ”%s: usage: %s < PID > [time delay]n“, progname, progname );

exit( 3 );

}  /* end of showUsage */

void getInfo ( int fd, int pid )

{

prpsinfo_t prp;

prstatus_t prs;

if ( ioctl( fd, PIOCPSINFO, &prp ) < 0 )

{

perror( ”ioctl“ );

exit( 5 );

}

if ( ioctl( fd, PIOCSTATUS, &prs ) < 0 )

{

perror( ”ioctl“ );

exit( 7 );

}

if ( counter > 9 )

{

fprintf( stdout, ”PIDtIMAGEttRSSttHEAPttSTACKn“ );

counter = 0;

}

fprintf( stdout, ”%ut%-9ut%-9ut%-15ut%-15un“, pid,

( unsigned int )prp.pr_bysize, ( unsigned int )prp.pr_byrssize,

( unsigned int )prs.pr_brksize, ( unsigned int )prs.pr_stksize );

counter++;

}  /* end of getInfo */

--------------------------------------------------------------------------

译者: 作者这里利用了ioctl(),而不是直接读取/proc下文件,这样做的好处在于即使系统升级后/proc布局改变,内核中相应ioctl cmd支持也随之改变,对于应用层的开发者,接口一样,源代码可平稳移植。事实上从作者前面举例来看, memlook.c是在Solaris 2.6以前的版本上开发的,但我并未修改就可以直接用在Solaris 2.6上,虽然此时/proc布局已经发生重大变化。

仔细阅读prstatus和prpsinfo结构,寻找那些你敢兴趣的成员。在未能真正掌握这种技术之前不要针对/proc文件系统使用write()或者ioctl()。针对特定进程胡乱做write()调用,结果未知。

◆ 结论

当痛苦调试程序或者试图获取指定进程状态的时候,/proc文件系统将是你强有力的支持者。通过它可以创建更强大的工具,获取更多信息。

:em02:  :em02:  :em02:  :em02:  :em02:  :em02:

climbmount 回复于:2004-12-18 13:26:45好文章,来得真及时。

.netfrihor 回复于:2004-12-18 16:00:04不错

顶一下

急不通 回复于:2004-12-21 09:41:24好文。bye the way,在linux下面的/proc也是类似的吗?

飞天二狭 回复于:2004-12-21 22:40:56linux下面当然有了。

原文转自:www.ltesting.net

篇4:对与错Windows系统

生活中的领悟,正与反 你真正领会了几条? 难得一笑,在笑声中受到了教育,以下的8条是在生活中总结出来的哲理。 1、建筑师 一位夫人打电话给建筑师,说每当火车经过时,她的睡床就会摇动。 “这简直是无稽之谈

生活中的领悟,正与反

你真正领会了几条? 难得一笑,在笑声中受到了教育。以下的8条是在生活中总结出来的哲理。

1、建筑师

一位夫人打电话给建筑师,说每当火车经过时,她的睡床就会摇动。

“这简直是无稽之谈!”建筑师回答说,“我来看看。”

建筑师到达后,夫人建议他躺在床上,体会一下火车经过时的感觉。

建筑师刚上床躺下,夫人的丈夫就回来了。他见此情形,便厉声喝问:“你躺在我妻子的床上干什么?”

建筑师战战兢兢地回答:“我说是在等火车,你会相信吗?”

【顿悟】有些话是真的,却听上去很假;有些话是假的,却令人无庸置疑。

2、引诱

英国绅士与法国女人同乘一个包厢,女人想引诱这个英国人,她脱衣躺下后就抱怨身上发冷。先生把自己的被子给了她,她还是不停地说冷。

“我还能怎么帮助你呢?”先生沮丧地问道。

“我小时候妈妈总是用自己的身体给我取暖。”

“小姐,这我就爱莫能助了。我总不能跳下火车去找你的妈妈吧?”

【顿悟】善解风情的男人是好男人,不解风情的男人更是好男人。

3、调羹

麦克走进餐馆,点了一份汤,服务员马上给他端了上来。

服务员刚走开,麦克就嚷嚷起来:“对不起,这汤我没法喝。”

服务员重新给他上了一个汤,他还是说:“对不起,这汤我没法喝。”

服务员只好叫来经理。

经理毕恭毕敬地朝麦克点点头,说:“先生,这道菜是本店最拿手的,深受顾客欢迎,难道您……”

“我是说,调羹在哪里呢?”

【顿悟】有错就改,当然是件好事,

但我们常常却改掉正确的,留下错误的,结果是错上加错。

4、穿错

饭厅内,一个异常谦恭的人胆怯地碰了碰另一个顾客,那人正在穿一件大衣。

“对不起,请问您是不是皮埃尔先生?”

“不,我不是。”那人回答。

“啊,”他舒了一口气,“那我没弄错,我就是他,您穿了他的大衣。”

【顿悟】要做到理直气壮,并不是件容易的事情。理直的人,往往低声下气;而理歪的人,却是气壮如牛。

5、回电

一个苏格兰人去伦敦,想顺便探望一位老朋友,但却忘了他的住址,于是给家父发了一份电报:“您知道托马的住址吗?速告!”

当天,他就收到一份加急回电:“知道。”

【顿悟】当我们终于找到最正确的答案时,却发现它是最无用的。

6、伤心故事

有三个人到纽约度假。他们在一座高层宾馆的第45层订了一个套房。

一天晚上,大楼电梯出现故障,服务员安排他们在大厅过夜。

他们商量后,决定徒步走回房间,并约定轮流说笑话、唱歌和讲故事,以减轻登楼的劳累。

笑话讲了,歌也唱了,好不容易爬到第34层,大家都感觉精疲力竭。

“好吧,彼德,你来讲个幽默故事吧。”

彼德说:“故事不长,却令人伤心至极:我把房间的钥匙忘在大厅了。”

【顿悟】我们痛苦,所以幽默;我们幽默,所以快乐。

7、卖书

一个很有名的作家要来书店参观。书店老板受宠若惊,连忙把所有的书撤下,全部换上作家的书。作家来到书店后,心里非常高兴,问道:“贵店只售本人的书吗?”

“当然不是。”书店老板回答,“别的书销路很好,都卖完了。”

【顿悟】“拍马屁”是个奇怪的词:你象是在奉承他,又象是在侮辱他。

8、帮忙

在邮局大厅内,一位老太太走到一个中年人跟前,客气地说:“先生,请帮我在明信片上写上地址好吗?”

“当然可以。”中年人按老人的要求做了。

“谢谢!”老太太又说:“再帮我写上一小段话,好吗?”

“好吧。”中年人照老太太的话写好后,微笑着问道:“还有什么要帮忙的吗?”

“嗯,还有一件小事。”老太太看着明信片说,“帮我在下面再加一句:字迹潦草,敬请原谅。”

【顿悟】你若不肯帮忙,人家会恨你一个星期;如果帮得不够完美,还不如……

原文转自:www.ltesting.net

篇5:简易ERP是什么?(帮你理解ERP)Windows系统

一天中午,丈夫在外给家里打电话:“亲爱的老婆,晚上我想带几个同事回家吃饭可以吗?”(订货意向) 妻子:“当然可以,来几个人,几点来,想吃什么菜?” 丈夫:“6个人,我们7点左右回来,准备些酒烤鸭番茄炒蛋凉菜蛋花汤,。。。。。,你看可以吗?”(

一天中午,丈夫在外给家里打电话:“亲爱的老婆,晚上我想带几个同事回家吃饭可以吗?”(订货意向)

妻子:“当然可以,来几个人,几点来,想吃什么菜?”

丈夫:“6个人,我们7点左右回来,准备些酒 烤鸭 番茄炒蛋 凉菜 蛋花汤。。。。。。,你看可以吗?”(商务沟通)

妻子:“没问题,我会准备好的,”(订单确认)

妻子记录下需要做的菜单(MPS计划),具体要准备的菜:鸭 酒 番茄 鸡蛋 作油。。。。。。(BOM物料清单),发现需要:1只鸭,5瓶酒,4个番茄,。。。。。。(BOM展开),炒蛋需要6个鸡蛋,蛋花汤需要4个鸡蛋(共用物料)。

打开冰箱一看(仓库),只剩下2个鸡蛋(缺料/MRP)。

来到自由市场,妻子:“请问鸡蛋怎么卖?”(采购询价)

小贩:“1个1元,半打5元,1打9.5元。”

妻子:“我只需要8个,但这次买1打。”(经济批量采购)

妻子:“这有一个坏的,换一个。”(验收、退料、换料)

回到家中,准备洗菜 切菜 炒菜。。。。。。(工艺路线),厨房中有燃气灶、微波炉、电饭堡。。。。。。(工作中心)。妻子发现拔鸭毛最费时间(瓶颈工序,关键工艺路线),用微波炉自己做烤鸭可能就来不及(产能不足),于是决定在楼下的餐厅里买现成的(产品托外)。

下午4点,电话铃又响:“妈妈,晚上几个同学想来家里吃饭,你帮准备一下。” (紧急订单)

“好的,儿子,你们想吃什么,爸爸晚上也有客人,你愿意和他们一起吃吗?”

“菜你看着办吧,但一定要有番茄炒鸡蛋。我们不和大人一起吃,6:30左右回来。”(呵呵,不能并单处理)

“好的,肯定让你们满意。”(订单确认)

鸡蛋又不够了,打电话叫小贩送来。(紧急采购)

6:30,一切准备就绪,可烤鸭还没送来,急忙打电话询问:“我是李太太,怎么订的烤鸭还没送来。”(采购 委外单跟催)

“不好意思,送货的人已经走了,可能是堵车吧,马上就会到的。”

门铃响了,“李太太,这是您要的烤鸭。请在单上签一个字。”(验收、入库、转应付帐款)

6:45,女儿的电话:“妈妈,我想现在带几个朋友回家吃饭可以吗?”(呵呵,又是紧急订购意向,要求现货)

“不行呀,女儿,今天妈妈已经需要准备两桌饭了,时间实在是来不及,真的非常抱歉,下次早点说,一定给你们准备好。”(哈哈,这就是ERP的使用局限,要有稳定的外部环境,要有一个起码的提前期,但如果库存材料有就要加班加点啦。)

7:00,丈夫问妻子菜做的怎样了。妻子马上回答说:“亲爱的!烤鸭、番茄炒蛋 凉菜做好了,现在正在做蛋花汤!再等一下吧!”(生产过程及进度控制)

蛋花汤不要放太多油(减少生产现场浪费)......

送走了所有客人,疲惫的妻子坐在沙发上对丈夫说:“亲爱的,现在咱们家请客的频率非常高,应该要买些厨房用品了(设备采购),最好能再雇个小保姆 (连人力资源系统也有接口了)。”

丈夫:“家里你做主,需要什么你就去办吧。”(通过审核)

妻子:“还有,最近家里花销太大,用你的私房钱来补贴一下,好吗?”(哈哈哈哈,最后就是应收货款的催要)

现在还有人不理解ERP吗?记住,每一个合格的家庭主妇都是生产厂长的有力竞争者!!!!

hanyu 回复于:-12-01 11:47:39不错,是否原创?

tom9030 回复于:2004-12-01 12:09:24早就看过

RobinL 回复于:2004-12-01 12:17:35不错,

fairyboy 回复于:2004-12-01 13:05:22很有意思啊,很容易理解,嘿嘿,

在家闲的慌。

hsiang_wang 回复于:2004-12-01 13:06:57很好!

fairyboy 回复于:2004-12-01 13:09:47[quote:43e98c83b7=”hanyu“]不错,是否原创?[/quote:43e98c83b7]

老大你想咋的。

thursday 回复于:2004-12-01 14:14:15转帖

oprs 回复于:2004-12-01 15:29:12

thursday 回复于:2004-12-01 15:36:57重要的是有人受益!

hanyu 回复于:2004-12-01 16:23:05[quote:30813960af=”fairyboy"]

老大你想咋的。[/quote:30813960af]

论坛鼓励原则!

thursday 回复于:2004-12-01 16:32:58不过好东东还是想和大家分享一下

hanyu 回复于:2004-12-01 16:48:53感谢thursday兄!

thursday 回复于:2004-12-01 17:05:58客气!我觉得共同进步才是最重要的!

health007 回复于:2004-12-02 08:57:21第一次看到阿,顶!

thursday 回复于:2004-12-02 10:57:353Q!

airfast419 回复于:2004-12-02 13:51:30[color=red:1901e4f3d4][/color:1901e4f3d4][size=18:1901e4f3d4][/size:1901e4f3d4]反正第一次看到,鼓励

lsx222 回复于:2004-12-03 13:35:48这么好的东东,支持,

希望你,明天更好。

论坛越来越旺!

t●-●s 回复于:2004-12-03 16:38:51挺不e的,推!

jsean 回复于:2004-12-05 12:38:33不错,通俗易懂!

yangjunma 回复于:2004-12-06 09:39:44:em02:  :em02:

wolf9653 回复于:2004-12-07 08:57:48真的不错,谢谢

thursday 回复于:2004-12-07 09:22:26好多人捧场!感动~~~

风筝芯 回复于:2004-12-07 15:27:13确实够易懂!!明白了!!!谢谢!! :)  :D  :em18:

原文转自:www.ltesting.net

篇6:困惑!!Windows系统

这种感觉很久了,今天又要搞通宵啊!

累人!!无数边在心里问自己,这样辛苦为啥啊!可惜一直没有找到答案,也许这就是人生吧!哎........!

原文转自:www.ltesting.net

关于CPYSPLF的问题Windows系统

计算机一级六大MS题型介绍

计算机应用基础报告

计算机基础知识题

9月全国计算机等级考试一级B模拟试题四(带分析)

计算机应用基础教案

会计电算化选择练习题

360浏览器乱码是怎么回事

计算机基础知识课件

全国计算机等考:计算机原理综合试卷四

理解CCSID,LANGID对系统内码的影响Windows系统
《理解CCSID,LANGID对系统内码的影响Windows系统.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

【理解CCSID,LANGID对系统内码的影响Windows系统(共6篇)】相关文章:

卡巴运行问题分析解决方法2022-08-16

计算机基础知识试题2023-10-10

计算机一级MSOffice考前提分冲刺题2023-06-09

计算机基础二级考试真题及答案2024-02-25

计算机等级考试(三级PC技术)考试大纲2023-06-05

霓虹灯基础知识学习2023-10-01

全国计算机基础真题及答案解答2023-12-29

大学生计算机考试答案2023-06-27

计算机课件2022-12-04

计算机基础知识试题及答案2023-08-20

点击下载本文文档