考完科目一,上周办完上车手续,这周总算是上车了。接下来的是连续4周,八个半天的高强度练习,希望自己可以顺利通过考试,拿到驾照。
我选的是周末直通车,比计时班略贵,上车之前,所有直通车的学院被教练队长叫到办公室,做了40分钟的思想教育,主旨是要和教练和平共处,换位思考,理解教练。教育完后,上车,本以为马上可以开始学习了,结果坐在车里又被教练教育了30分钟,汗。直通车不同于计时班,从开始到结尾,始终是那一个教练教你。人与人之间的初次相处,保持克制相互友好是比较容易的,但是长时间的睦邻友好就不容易了,容易产生矛盾,我觉得这是队长和师傅说教的原因。
今天主要是主要学习了换挡、离合等的使用,缓慢匀速的前进、倒车,控制车和几个杆的距离,其中最为难是缓慢匀速的前进,必须很熟练的控制离合的力度,动作太大容易熄火,很不易控制。对于贴库、移库教练给了各种口诀,一会需要背诵。
驾校真是繁忙,学驾照的人真是多,驾校早上、下午、晚上三个时段,每次班车都拉来满满的一车人。教练一天要工作11个小时,风吹日晒,甚是辛苦啊。
ZST Blog
寻找发现 美好 幸福 睿智 知识
2012年4月14日 星期六
2012年4月13日 星期五
2012年3月13日 星期二
linux shell中的管道执行
linux shell中管道发挥的作用是文件描述符重定向,例如 prog1 | prog2 | prog3,管道会将prog1的标准输出重定向为prog2的标准输入,将prog2的标准输出重定向为prog3的标准输入,prog1的标准输入和prog3的标准输出并没有改变。比如命令"ps -ef | grep -w "nginx""将ps命令的标准输出内容作为grep的输入,两个命令的组合的只输出关于nginx进程的信息。
这里归档两个平时没有想明白的问题:
1、shell管道中程序按什么顺序执行?进程关系是什么样子?
当前有很多的shell程序,实现各不同,有的支持作业控制,代表有:bash(bourne again shell),有的不支持,代表有bourne shell。
prog1 | prog2 | prog3
1)在不支持作业控制shell中,prog3是shell的子进程,而prog1和prog2为prog3的子进程。执行如下图所示
[root@zhangst ~]# uname -a
Linux zhangst.F14 2.6.35.6-45.fc14.i686 #1 SMP Mon Oct 18 23:56:17 UTC 2010 i686 i686 i386 GNU/Linux
[root@zhangst ~]# ps -o pid,ppid,pgid,session,tpgid,tty,comm | cat | grep -v "*"
PID PPID PGID SESS TPGID TT COMMAND
2667 2664 2667 2667 2689 pts/0 bash
2689 2667 2689 2667 2689 pts/0 ps
2690 2667 2689 2667 2689 pts/0 cat
2691 2667 2689 2667 2689 pts/0 grep
上面的例子中ps、cat、grep三个进程都为bash的子进程,ps进程最先执行,并且三个进程在一个进程组中,ps为组长进程,这个组为前台进程组(TPGID),而bash为后台进程。
2、如何判断管道中程序是否成功执行?某个程序执行失败是否影响其它程序的执行?
1)shell中有一个变量数组PIPESTATUS,保存了上一个执行管道的状态。
echo ${PIPESTATUS[*]};就可以输出所有管道进程的执行状态。
[root@zhangst test]# ./0 | ./1 | ./2
[root@zhangst test]# echo ${PIPESTATUS[*]}
0 1 2
0、1、2三个程序main函数中只包含一条return代码,分别返回 0,1,2。
2)bash中管道程序的执行相互不影响的,参考下面的例子:
[root@zhangst test]# ./0 | grep -v | ./2
用法: grep [选项]... PATTERN [FILE]...
试用‘grep --help’来获得更多信息。
2
0
[root@zhangst test]# echo ${PIPESTATUS[*]}
0 2 2
0、2三个程序分别在标准错误输出输出0、2,然后返回0、2
grep -v是不正确的,不能正确执行,但是0和2都正确执行完毕了。
这里归档两个平时没有想明白的问题:
1、shell管道中程序按什么顺序执行?进程关系是什么样子?
当前有很多的shell程序,实现各不同,有的支持作业控制,代表有:bash(bourne again shell),有的不支持,代表有bourne shell。
prog1 | prog2 | prog3
1)在不支持作业控制shell中,prog3是shell的子进程,而prog1和prog2为prog3的子进程。执行如下图所示
(摘自APUE)
2)对于支持作业控制的shell,prog1、prog2、prog3都为shell的子进程,在bash中的执行顺序为 prog1、prog2、prog3,具体和shell的实现有关。[root@zhangst ~]# uname -a
Linux zhangst.F14 2.6.35.6-45.fc14.i686 #1 SMP Mon Oct 18 23:56:17 UTC 2010 i686 i686 i386 GNU/Linux
[root@zhangst ~]# ps -o pid,ppid,pgid,session,tpgid,tty,comm | cat | grep -v "*"
PID PPID PGID SESS TPGID TT COMMAND
2667 2664 2667 2667 2689 pts/0 bash
2689 2667 2689 2667 2689 pts/0 ps
2690 2667 2689 2667 2689 pts/0 cat
2691 2667 2689 2667 2689 pts/0 grep
上面的例子中ps、cat、grep三个进程都为bash的子进程,ps进程最先执行,并且三个进程在一个进程组中,ps为组长进程,这个组为前台进程组(TPGID),而bash为后台进程。
2、如何判断管道中程序是否成功执行?某个程序执行失败是否影响其它程序的执行?
1)shell中有一个变量数组PIPESTATUS,保存了上一个执行管道的状态。
echo ${PIPESTATUS[*]};就可以输出所有管道进程的执行状态。
[root@zhangst test]# ./0 | ./1 | ./2
[root@zhangst test]# echo ${PIPESTATUS[*]}
0 1 2
0、1、2三个程序main函数中只包含一条return代码,分别返回 0,1,2。
2)bash中管道程序的执行相互不影响的,参考下面的例子:
[root@zhangst test]# ./0 | grep -v | ./2
用法: grep [选项]... PATTERN [FILE]...
试用‘grep --help’来获得更多信息。
2
0
[root@zhangst test]# echo ${PIPESTATUS[*]}
0 2 2
0、2三个程序分别在标准错误输出输出0、2,然后返回0、2
grep -v是不正确的,不能正确执行,但是0和2都正确执行完毕了。
2012年2月4日 星期六
awk & sed命令总结
awk
file 整个文件
record 文件中一行转为一个record,awk每次处理一个record
field record由field组成,如$1,$2,$0表示真个record
例子:
file s.c
1 2
3 4
awk '{d=($1 + $2); print d}' s.c
输出:
3
7
awk匹配模式从流中提取自己需要的内容:
awk -F "\"" '{printf "msgid ""\""$2"\"""\n""msgstr \"\"\n\n"}' pc_err.c
在线资料
http://sed.sourceforge.net/sed1line_zh-CN.html
sed(stream editor)
commands = pattern + action.
$ matches the end of line
^ matches the beginning of the line
sed -e '1,10d'
删除stdin输入中的前10行,并将其余输出stdout
-e 把 '1,10d'当作sed语句来执行
1,10 pattern
d action
sed -n -e '/1/p' z.c
输出z.c中匹配1的行
-n 不输出test.txt原文的内容
sed -e '3,$d'
sed -n -e '1,2p'
sed -e '2q'
$表示文本的最后一样,d表示delete
q表示quit
输出流的前两行
sed -e '1,2d' -e '4,5d' z.c
同时指定多个-e
grep 'foo' log | grep -v 'debug' == sed -n -e '/debug/d' -e '/foo/p' log
sed -e 's/PC_NO_MATCH) goto ret;/PC_NO_MATCH) {ret = PC_ERR_RECORD_REPEAT; goto ret;}/' -i *.c
sed -e 's/str1/str2/' -i *.c
把当前目录下所有c文件中的str1替换为str2
在线资料
http://www.tsnc.edu.cn/default/tsnc_wgrj/doc/abs-3.9.1_cn/html/sedawk.html
2012年2月3日 星期五
折半查找的实现
折半查找又成为二分查找,常用来对有序的线性表做元素查找。适用于一经建立,很少改变并且经常查找的场景。
实现如下:
使用二分思想,求平方根的函数:
实现如下:
/**
* Function binary_search (number, array, array_len)
*
* Returns
* -1,if not found.index of array,if found.
*
* Parameters
* @number: the nubmer waiting for search
* @array: search array pointer
* @array_len: esarch array len
*
* Description
* premise that array is orderly.
*
**/
static int binary_search(int number, int *array, int array_len)
{
int mid, start = 0, end = array_len - 1;
while (start <= end) {
mid = (start + end) / 2;
if (array[mid] < number)
start = mid + 1;
else if (array[mid] > number)
end = mid - 1;
else
return mid;
}
return -1;
}
* Function binary_search (number, array, array_len)
*
* Returns
* -1,if not found.index of array,if found.
*
* Parameters
* @number: the nubmer waiting for search
* @array: search array pointer
* @array_len: esarch array len
*
* Description
* premise that array is orderly.
*
**/
static int binary_search(int number, int *array, int array_len)
{
int mid, start = 0, end = array_len - 1;
while (start <= end) {
mid = (start + end) / 2;
if (array[mid] < number)
start = mid + 1;
else if (array[mid] > number)
end = mid - 1;
else
return mid;
}
return -1;
}
使用二分思想,求平方根的函数:
/**
* Function mysqrt (y, precision)
*
* Returns
*
*
* Parameters
* @y:
* @precision:
*
* Description
* 求y的平方根,x*x == y
*
**/
static double mysqrt(double y, double precision)
{
double x, start = 0.0, end = y;
assert(y > 0.0);
while (1) {
x = (start + end) / 2;
if (x*x < y)
start = x;
else
end = x;
if (fabs(x*x - y) < precision)
break;
}
return x;
}
* Function mysqrt (y, precision)
*
* Returns
*
*
* Parameters
* @y:
* @precision:
*
* Description
* 求y的平方根,x*x == y
*
**/
static double mysqrt(double y, double precision)
{
double x, start = 0.0, end = y;
assert(y > 0.0);
while (1) {
x = (start + end) / 2;
if (x*x < y)
start = x;
else
end = x;
if (fabs(x*x - y) < precision)
break;
}
return x;
}
订阅:
帖子 (Atom)

