Page 1 of 3123

達拉然酒店——“英雄光臨”與“下流畜生”

自娛自樂 No Comments »142 views

我對此感到疑惑不解:曾經作為聯盟七個王國之一的達拉然,爲什麼會與聯盟部落保持中立?接受部落也就算了,爲什麼還會接受正攻打安伯米爾的被遺忘者?當然解釋起來也並不困難,銀色黎明和卡德加都是先例,就是因爲巫妖王的勢力太強大了,以至於達拉然不得不接受一切可以團結的力量共同對抗。但是我一直懷疑達拉然的法師們是否具有如此高尚的品格,直到我看到了達拉然城內專門爲聯盟和部落開設的旅店,才恍然大悟。

聯盟的旅店裝飾得金碧輝煌,而且有一個響亮的名字,叫做“英雄光臨(A Hero’s Welcome)”。

形成強烈反差的是,部落的旅店名叫“下流畜生(The Filthy Animal)”。


Read the rest of this entry »

标签:, , , , , , ,

j,q,x與尖團合流

中文與漢字, 稷下學宮 6 Comments »144 views

有沒有發現,清華大學的拉丁字母拼寫形式是Tsinghua呢?有沒有發現,在拼音打字的時候,聲母爲j,q,x的字特別多呢?有沒有發現,不少方言中普通話j,q,x的對應讀音最奇怪呢?

j,q,x的來源

現代普通話中的聲母j,q,x,來自于近代漢語聲母z,c,s和g,k,h。本身j,q,x是從g,k,h分化出來的三個新的聲母,例如“君”古音讀作gün(與日語相似),“其”讀作ki,“虛”讀作hü,發展過程中,gi,ki,hi,gü,kü,hü聲母變成了j,q,x。這種現象叫“腭化”(舌面擡高,接近硬腭),是語音發展走向成熟的表現,分化出的聲母有利於語音更清晰,更精確表意。目前粵語等方言中,還保留了沒有腭化的讀音,其他大部份地區已經腭化。

此外,現代j,q,x還有一大部份的字是來自于z,c,s。例如“箭”近代讀作zian,“千”讀作cian,“迅”讀作sün,和“作”、“此”、“三”的聲母是相同的。現在不少老年人以及很多方言中,還都是這麼念的。近代語音學把zi,ci,si(包括zü,cü,sü,下同)稱作“尖音”,把腭化後的gi,ki,hi(j,q,x)成為“團音”。普通話和臺灣通行的國語中不再區分尖音和團音,但是在戲曲界,如京劇、豫劇、昆曲、川劇、黃梅戲等所有名家都分尖團音,甚至還可以找到分尖團的國歌錄音帶(前cian進zin、前cian進zin、前cian進zin進zin)。

國羅派與尖團合流

尖團音合的最終促成流發生在近代不到一百年內。與gi,ki,hi腭化不同的是,這次合流是人工促成的,是音節的模糊化,是語音發展的退化。尖團合流在近代學術界、教育家曾經有過激烈的爭論,尖團合流的促成主要是國語羅馬字派(簡稱國羅派)主張的結果。近代中國內憂外患,不少有識之士把中國的落後歸咎于漢字,同時也產生了一種“漢語落後論”(其實漢語是很先進的“分析語”,英語正從“屈折語”朝著“分析語”的方向發展)。有人認為,漢語聲母過多,韻母也十分複雜,難以用26個拉丁字母表示,因此應當“削足適履”,國羅派就是其中之一。國羅派主張zi,ci,si與ji,qi,xi不需要區分,一直在不遺餘力地推廣其不分尖團音的“國語羅馬字”,最終促成了尖團合流。

尖團合流的問題可以追溯到清代,滿清統治者入關後,開始學習漢語。但由於滿語只有11個聲母(遠少於《廣韻》36聲母,近古音24聲母,現代普通話21聲母),許多漢語讀音都發不清楚,其中尤以zi,qi,si為甚。因此,滿清旗人習慣於將尖音讀作團音。起初漢族下至文盲,上至文豪,所有百姓都是可以分清楚尖團音的,但後來有一些讀書人爲了迎合官場上滿人的習慣,故意不分尖團音。久而久之,中國北方逐漸出現了少數不分尖團音的漢人,其中犬儒居多。後來由於滿人對漢語學習的深入,發現尖音對應了《廣韻》“精”、“清”、“從”、“心”、“邪”聲母,團音對應了“見”、“溪”、“群”、“曉”、“匣”聲母,因此滿人也開始糾正讀音。乾隆年間朝廷還專門撰寫了《圓音正考》來糾正尖團合流的錯誤,合流的尖團開始慢慢重新分化。

民國初年,國民政府制定了區分尖團的“國音”(後被稱為“老國音”)。一九二三年,國羅派開始興風作浪,違背語音事實地制定了“國語羅馬字”,粗暴的合併了尖團音,砍掉了iai韻母,並開始大肆推廣。國語羅馬字的推廣不得人心,一九三二年,瞿秋白主持制定推行了區分尖團音的“北方話拉丁化拼音方案”,簡稱“北拉”。由於北拉派與國羅派主張不和,因此遭到以黎錦熙為首的尖團合流頑固派的嚴酷鎮壓。使用北拉注音者被冠以“反政府”拘禁。

新中國成立後,“北拉”得到毛澤東的支持,終於走上前臺。黎錦熙不甘屈從,仍然竭力製造尖團合流,因此否定北拉,要求新的方案出臺。以吳玉章爲首的拼音方案委員會先後四次提出了分尖團的拼音方案《漢語拼音方案(拉丁字母式)草案初稿》,都遭到黎錦熙的抵制而失敗。一九五五年,中國文字改革委員會通過了和“北拉”基本相同的《中文拼音文字(拉丁字母式)草案初稿》。頑固派首腦黎錦熙不甘心自己的失敗,串聯語言所長羅常培以語言研究所的名義搞了個“通信調查尖團音”,讓縣教局找縣駐地師範學校的一個教師或學生(一個人代表一個縣)區分尖團音。調查的統計資料是,分尖團的方言占 20.3%,不分尖團的方言占79.7%。這是黎錦熙預想的結果,因為接受調查的師範生,一方面已經接受了不分尖團的新國音,難以整齊區分了;另一方面,即使能區分,表上又沒寫明按方言,學生就像考試一樣,生怕填錯了,只好以黎氏字典上的標音填表。這樣就必然會得到不分尖團的方言占多數的結果。因此在黎錦熙的操縱下,“理所當然”地通過了不區分尖團音的《漢語拼音方案》。至此,尖團音完全合流,多數數人已經不能整齊區分所有尖團音。

尖團合流的後果

尖團音是漢語語言數千年發展的瑰寶,是漢族和漢字文化圈普通人民和知識階層的共同語音。美國語言學家Jerry Norman曾經嘲笑尖團合流的《漢語拼音方案》是“懒惰的方案”。語言學界普遍認為,一個語言增加新的語音是非常苦難的。語音就像“不可再生資源”,合流容易分化難,尖團合流就等於我們扔掉了寶貴的語音資源。尖團合流以後,漢語音節數量減少,導致音譯不夠準確,遠沒有用粵語等方言音譯讀音接近。同時舊時一些音譯會發生變味(例如Spain西班牙,是xi ban ya更接近還是si ban ya更接近?)。

尖團音合流以後,增加了多數人學習普通話的難度,因為這個不去分尖團“普通話”,甚至已經和北京話有了顯著區別,和南方各個方言區別更甚。老年人,尤其是沒有受過教育的婦女,尤其能區分尖團。現代年輕人說話不分尖團,與老年人交談時有聽不懂,更加深了老一輩與年輕一輩的代溝。尖團合流割裂了以漢語爲載體的文化藝術形式,尤其是嚴格區分尖團的京劇。本來現代愛聽京劇的人就越來越少了,再加上尖團合流導致的“聽不懂”,更使京劇藝術雪上加霜。

尖團合流使音節區分度減少,導致本可以直接從讀音聽出來的兩個字現在分不清。如“劍jian”和“箭zian”,“希xi”和“西si”,“近jin”和“進zin”,“郡jün”和“俊zün”,“宣süan”和“喧xüan”,“九jiu”和“酒ziu”,“結jie”和“節zie”(你是愛寫“節點”,還使“結點”呢?)等等。與音節減少相伴的就是同音字的增多,尤其體現在用漢語拼音打字的時候,j,q,x爲聲母的字特別多,即使是搜狗拼音、Google拼音這樣的高智能輸入法,也經常會在j,q,x的詞彙上組詞出錯。

附:被合併的團音iai韻母

iai韻母原本是漢語一個很重要的語音,不少形聲字都以此爲聲旁。國羅派認為“拉丁語中沒有iai這個古怪的韻母,寫成iai不符合拼寫規則”,因此要刪除iai韻母。下為部份iai韻母的字,這些字都是團音,即古音聲母爲g,k,h。

jiai 皆介价界街
qiai 楷揩锴
xiai 蟹鞋骇谐

可以看出,皆、楷、锴、谐本為同韻字(iai),現在卻變成了聲母韻母均不相同的字,打破了聲旁字族的嚴謹性,需要單獨記憶。另外,“街”字在很多方言中念作jiai或giai或gai,唯獨普通話變成了不倫不類的jie,“鞋”字也同理(四川話說hai)。

BYVoid原創 轉載請注明

标签:, , , , , ,

Linux C语言编程学习笔记 (1)进程控制入门

計算機技術 No Comments »684 views

想进行Linux系统开发已经很久了,一直没有付诸实践。今日终于开始学习Linux下的C语言编程,研究一天,终于大概弄明白了Linux系统进程管理的一些基本概念和编程方法,总结下来以方便大家学习和自己实践。

进程系统

Linux是个多任务多用户的操作系统,系统直接管理的每个任务的最小单位,就是进程(process)。每个进程都有一个惟一的标识符pid,不同的进程pid不相同,在Shell下输入ps -A,可以显示当前的所有进程。一个进程不代表一个应用程序(application),因为一个应用程序可能对应多个进程,也不代表一个可执行文件(executable file),因为一些可执行文件可以被同时运行多个,它们是互不相干的。

在Linux中,进程不是相互独立的,每个进程(除了init进程)都有一个父进程(parent process),同时每个进程可以有0个1个或多个子进程(child process)。换句话说,Linux的进程是一个树形结构,在Shell下输入pstree可以查看这个树的形状。下图为pstree返回结果的一部分。

init─┬─NetworkManager─┬─dhclient
│                └─{NetworkManager}
├─SystemToolsBack
├─avahi-daemon───avahi-daemon
├─bonobo-activati───{bonobo-activati}
├─console-kit-dae───63*[{console-kit-dae}]
├─hald───hald-runner─┬─hald-addon-acpi
│                    ├─hald-addon-cpuf
├─pulseaudio─┬─gconf-helper
│            └─2*[{pulseaudio}]
├─rsyslogd───2*[{rsyslogd}]
├─seahorse-daemon
├─telepathy-gabbl
├─telepathy-haze─┬─telepathy-haze
│                └─{telepathy-haze}
├─trashapplet
└─wpa_supplicant

在C语言中,获得当前进程的pid的函数是pid_t getpid(void);,获得当前进程的父进程的pid的函数是pid_t getppid(void);,两者都在unistd.h中声明。

用户和权限

因为Linux是多用户的系统,所以内核中有着强大的用户控制,因此每个进程还有一个所有者,即实际用户ID(uid)。系统uid是一个整数,不同于用户名。默认情况下进程的uid继承于父进程。例如我用所有者为byvoid(uid为1000)的bash终端启动了一个进程,那么这个进程的uid也是1000。用户uid可以通过uid_t getuid(void);函数获得。如果权限满足,程序在运行时可以修改uid,C语言函数为int setuid(uid_t uid);,如果成功执行返回0,否则返回-1。只有具有root用户权限的进程可以设置uid。

除此以外,进程还有一个有效用户ID(euid)。euid是决定进程文件系统权限的身份,一般情况下进程euid和uid是相同的。在C语言中可以通过uid_t geteuid(void);函数获得进程euid。同样euid也可以修改,函数为int seteuid(uid_t uid);仅当当前uid和euid中至少有一个为0(root)时,才可以设置euid。有一种特殊情况,就是一个二进制可执行文件所有者为root,并且被chmod +s后,在一般用户身份下执行,这时产生的进程uid为一般用户,而euid为0(root),这种情况下该进程具有和root一样高的权限。

进程生成

fork函数

Linux允许用户创建用户进程的子进程,在C语言中通过pid_t fork(void);函数实现。fork函数的基本功能是生成一个子进程,并复制当前进程的数据段和堆栈段,子进程和父进程共用代码段。因为复制了堆栈段,所以父进程和子进程都停留在fork函数的栈帧中,fork函数要返回两次,一次在父进程中返回,一次在子进程中返回,但是两次的返回值是不一样的。在父进程中,fork函数返回值为子进程的pid(如果成功调用的话),在子进程中,fork函数的返回值为0。因此可以根据返回值的不同确定程序的运行流程。父进程和子进程默认情况下是同步执行的,由系统内核调度,哪个先执行是未知的。因为父子进程的数据段和堆栈段都是独立的,所以两者互不干涉,各行其是,内存不能直接共享。

执行程序

Linux中要执行一个外部程序,必须生成一个子进程,因为内核执行程序的命令exec会替换掉当前进程的地址空间的所有内容并继续执行,执行另一个程序意味着当前程序不再执行。在C语言中,并没有exec这样的一个函数,而是有下列一组函数。

int execl (const char * file,const char * arg,…);
int execlp(const char * file,const char * arg,…);
int execle(const char * file,const char * arg,…,NULL,char * const envp[ ]);
int execv (const char * file, char * const argv[ ]);
int execvp(const char *file ,char * const argv []);
int execve(const char * filename,char * const argv[ ],char * const envp[ ]);

其中以execl开头的函数,第一个参数file为可执行文件名,接下来有若干个参数,分别为传入的argv[0],argv[1],argv[2],…,最有以NULL结束。如果file参数为路径名(其中包含’/'),execl函数会直接定位到文件并执行,否则仅在当前目录下寻找文件,而execlp函数遇到文件名则会按照环境变量PATH的顺序寻找。execle最后一个参数为二维字符数组,表示传递给程序新的环境变量列表。execv,execvp,execve和前三者用法相似,只不过不以可变参数列表的方式传递参数,换以二维字符数组。上述函数执行失败后会返回-1,如果执行成功的话将会不返回,因为代码段已经被新的可执行程序替换。

进程阻塞

wait函数

在实际的应用中,有时候需要让父进程停下来等待子进程的执行完毕,这时候就需要进行进程阻塞(process blocking)。C语言中使用pid_t wait(int *statloc)函数可以得到子进程的结束信息。调用wait函数的进程会阻塞,直到该进程的任意一个子进程结束,wait函数会返回结束的子进程的pid,结束信息保存在statloc指针指向的内存区域。如果该进程没有活动的子进程,那么立即出错并返回-1。如果statloc指针为NULL,那么表示不关心进程结束的状态。如果有多个子进程,wait函数返回哪个数不确定的,需要通过pid来判断。

如果我们需要等待特定的一个进程,可以使用pid_t waitpid(pid_t pid,int *statloc,int options)函数。waitpid函数的第一个参数指定了要等待的进程pid,并且有更多的选项。

僵尸进程

当一个子进程退出时,如果没有被父进程通过wait取得状态信息,这些信息会一直保留在内核内存中,子进程的pid也不会被消除,直到父进程退出,这时候这些子进程被称为僵尸进程(zombie process)。虽然僵尸进程只占用很少的一点内存,但如果是长期运行的服务器,积累大量的僵尸进程会导致系统进程表被塞满,以至于无法创建新的进程。产生一个僵尸进程很容易,只需要让子进程先于父进程退出即可,在父进程退出之前,子进程将会成为僵尸进程。

孤儿进程

与僵尸进程相反,如果父进程没有阻塞并先于子进程退出,那么子进程将会成为孤儿进程(orphan process)。Linux系统中init进程负责领养所有孤儿进程,也就是说,孤儿进程的父进程会被设为init进程。init进程作为系统守护进程(daemon process),会不断调用wait函数等待领养的孤儿进程退出,不会产生僵尸进程。

利用孤儿进程避免僵尸进程

许多时候我们不能让父进程阻塞下来等待子进程处理完以后再继续,例如在多用户的服务器程序上。这时如果让子进程处理事务,就会产生大量僵尸进程。避免僵尸进程出现的一个经典方法就是利用孤儿进程,具体方法为首先用父进程产生一个子进程,然后让子进程立刻产生一个孙子进程,用孙子进程来处理事务。同时父进程阻塞等待,并让子进程则立刻退出。这时候由于子进程已经退出,孙子进程就变成了孤儿进程,被init领养。而子进程立刻退出后,父进程收到信号并正确销毁了子进程,相比之下父进程只阻塞了可以忽略不计的一瞬间。下面程序是一个例子避免僵尸进程。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
 
int main(void)
{
	if(fork() == 0) //启动一个子进程
	{
		printf("the child\n");
		if(fork() == 0) //启动一个孙子进程
		{
			printf("do something you want\n");
			sleep(5);
			printf("done\n");
			exit(0);
		}
		else //子进程立刻退出
			exit(0);
	}
	else
	{ //父进程立即阻塞
		wait(NULL);
		printf("the parent\n");
		sleep(10);
	}
	return 0;
}

BYVoid 原创作品

标签:, , , , , , , , , , , , , , , ,

“鍾”、“鐘”之辨

中文與漢字 No Comments »102 views

“鍾”、“鐘”均讀作“zhong1”,其“簡化字”均爲“钟”。兩者本義不同,但簡化字刻意追求簡略,把兩者合為一字,因而在辨別上造成了不少困難。

”,本意爲“盛酒的器具”,與“盅”相通,如“酒鍾(酒盅)”、“酒逢知己千鍾少,話不投機半句多”,後引申爲一種容量計量單位。另一個引申義爲“積聚,集中”,例如“鍾愛”、“鍾情”、“鍾靈毓秀”。此外,“鍾”和“鍾離”還是兩個姓氏,古有“鍾繇”、“鍾子期”、“鍾離權”等人。

”,本意爲“一種打擊樂器”,如“編鐘”、“鐘鳴鼎食”。後起意義爲一種計時工具“鐘錶”,如“鬧鐘”、“鐘點”、“鐘擺”。

标签:, , , , , , , , , ,

“后”、“後”之辨

中文與漢字 3 Comments »96 views

(本文與漢字學相關,故用傳統漢字書寫)

“后”、“後”均讀作“hou4”。

”本義“君王、諸侯、君王的正妻”,例如《詩經˙商頌˙玄鳥》:“商之先后,受命不殆,在武丁孫子。”“皇天土”。

”的意義就比較廣泛了,可以用作名詞、形容詞、副詞或動詞,其核心意義就是“時間空間上與‘先’相對的概念”,引申爲“子孫”,“落後”,“延緩”。

兩者並非同出一源,然古籍已有互假,如《禮記˙大學》:“知止而后有定。”中“后”通“後”。互假在古籍中畢竟僅僅是極少數現象,大規模的混淆開始於大陸“簡化字政策”的推行,“後”字被認爲繁難而廢棄改寫爲“后”。而且如同“蕭”、“肖”二姓被人爲合併,“后”、“後”也本是不同的兩個姓氏,如春秋時齊國有孔子的弟子后處,漢代有后蒼,五代時後漢有後贊,清代有後禮。

标签:, , , , , , , , , ,
26 queries. 0.553 seconds. Designed by NattyWP .
Images by desEXign.