-
2007-06-29
ANSI C中的文件操作 - [开发手记]
原来一直以为C语言操作文件有些复杂,在今晚的使用中,发现并不是很困难,当然只是一些简单的应用。复杂的使用后面慢慢学习。这里操作的文本文件。
文件操作是由stdio.h提供的FILE类型实现的,用于定义文件指针。例如,下面的语句定义了两个待操作的文件:
FILE *in, *out;打开一个文件使用fopen函数,该函数的参数为两个字符串。前一个参数指定文件名,后一个参数指定打开模式(”r”=读, “w”=写, “a”=在已有文件后继续写 )。函数返回一个文件指针作为此文件的标识供以后使用。
和文件操作相关的函数有:
int fscanf(file,str,arg1,…,argn) :从file指针对应的文件中读入数据,具体行为同scanf
int fprintf(file,str,arg1,…,argn) : 向file指针对应的文件中输出数据,具体行为同printf
int fgetc(file) : 从file指针对应的文件中读入数据,具体行为同getchar
int fputc(c,file) : 向file指针对应的文件中输出数据,具体行为同putchar
char *fgets(str,n,file) :从file指针对应的文件中读入数据到str字符串,读到第n个字符为止
int fputs(str,file) : 向file指针对应的文件中输出数据,具体行为同puts
int fflush(file) : 立即写入文件,同Pascal中的flush
int feof(file) : 文件是否结束,同Pascal中的eof
int fclose(file) :关闭文件,同Pascal中的close下面的程序是文件操作版A+B问题,你可以看到文件操作具体的实现方法。
#include “stdio.h”
int main()
{
FILE *in, *out;
long a, b;
in = fopen("test.in","r");
fscanf(in, "%d%d", &a, &b);
fclose(in);
out = fopen("test.out","w");
fprintf(out, "%d", a+b);
fclose(out);
return 0;
} -
2007-04-29
Cygwin中Vi使用指南 - [开发手记]
在Cygwin中也有vi文本编辑器,缺省安装是没有的,需要重新安装,安装是将Vi选中即可。使用的命令如下:
进入vi的命令
vi filename :打开或新建文件,并将光标置于第一行首
vi +n filename :打开文件,并将光标置于第n行首
vi + filename :打开文件,并将光标置于最后一行首
vi +/pattern filename:打开文件,并将光标置于第一个与pattern匹配的串处
vi -r filename :在上次正用vi编辑时发生系统崩溃,恢复filename
vi filename….filename :打开多个文件,依次编辑移动光标类命令
h :光标左移一个字符
l :光标右移一个字符
space:光标右移一个字符
Backspace:光标左移一个字符
k或Ctrl+p:光标上移一行
j或Ctrl+n :光标下移一行
Enter :光标下移一行
w或W :光标右移一个字至字首
b或B :光标左移一个字至字首
e或E :光标右移一个字j至字尾
) :光标移至句尾
( :光标移至句首
}:光标移至段落开头
{:光标移至段落结尾
nG:光标移至第n行首
n+:光标下移n行
n-:光标上移n行
n$:光标移至第n行尾
H :光标移至屏幕顶行
M :光标移至屏幕中间行
L :光标移至屏幕最后行
0:(注意是数字零)光标移至当前行首
$:光标移至当前行尾屏幕翻滚类命令
Ctrl+u:向文件首翻半屏
Ctrl+d:向文件尾翻半屏
Ctrl+f:向文件尾翻一屏
Ctrl+b;向文件首翻一屏
nz:将第n行滚至屏幕顶部,不指定n时将当前行滚至屏幕顶部。插入文本类命令
i :在光标前
I :在当前行首
a:光标后
A:在当前行尾
o:在当前行之下新开一行
O:在当前行之上新开一行
r:替换当前字符
R:替换当前字符及其后的字符,直至按ESC键
s:从当前光标位置处开始,以输入的文本替代指定数目的字符
S:删除指定数目的行,并以所输入文本代替之
ncw或nCW:修改指定数目的字
nCC:修改指定数目的行删除命令
ndw或ndW:删除光标处开始及其后的n-1个字
do:删至行首
d$:删至行尾
ndd:删除当前行及其后n-1行
x或X:删除一个字符,x删除光标后的,而X删除光标前的
Ctrl+u:删除输入方式下所输入的文本搜索及替换命令 :
/pattern:从光标开始处向文件尾搜索pattern
?pattern:从光标开始处向文件首搜索pattern
n:在同一方向重复上一次搜索命令
N:在反方向上重复上一次搜索命令
:s/p1/p2/g:将当前行中所有p1均用p2替代
:n1,n2s/p1/p2/g:将第n1至n2行中所有p1均用p2替代
:g/p1/s//p2/g:将文件中所有p1均用p2替换选项设置
all:列出所有选项设置情况
term:设置终端类型
ignorance:在搜索中忽略大小写
list:显示制表位(Ctrl+I)和行尾标志($)
number:显示行号
report:显示由面向行的命令修改过的数目
terse:显示简短的警告信息
warn:在转到别的文件时若没保存当前文件则显示NO write信息
nomagic:允许在搜索模式中,使用前面不带“\”的特殊字符
nowrapscan:禁止vi在搜索到达文件两端时,又从另一端开始
mesg:允许vi显示其他用户用write写到自己终端上的信息最后行方式命令
:n1,n2 co n3:将n1行到n2行之间的内容拷贝到第n3行下
:n1,n2 m n3:将n1行到n2行之间的内容移至到第n3行下
:n1,n2 d :将n1行到n2行之间的内容删除
:w :保存当前文件
:e filename:打开文件filename进行编辑
:x:保存当前文件并退出
:q:退出vi
:q!:不保存文件并退出vi
:!command:执行shell命令command
:n1,n2 w!command:将文件中n1行至n2行的内容作为command的输入并执行之,若不指
定n1,n2,则表示将整个文件内容作为command的输入
:r!command:将命令command的输出结果放到当前行 。 -
2007-04-26
Cygwin中查看命令说明信息 - [开发手记]
Cygwin中有众多的命令,有些时候可能会对命令的参数记得不是很清楚,那么可以使用一下的方式来查看命令的说明信息,里面一般会后较详细的使用说明。
这个命令就是:info 要查看的命名
如:
MrYang@cs-7f03473c3bc7 ~
$ info yacc会有如下输出:
File: *manpages*, Node: yacc, Up: (dir)
YACC(1) BSD General Commands Manual YACC(1)
NAME
yacc - an LALR(1) parser generatorSYNOPSIS
yacc [-dlrtv] [-b file_prefix] [-o output_filename] [-p symbol_prefix]
filename……
要退出只需要按“Q” 即可退出。
当然你也可以使用:info info来查看命令info的说明信息。
-
2007-04-23
Cygwin使用Windows的驱动器 - [开发手记]
在Cygwin下访问Windows下的内容,首先使用DF命令直接查看下本地驱动器。如下:
MrYang@cs-aewjqhvksxfj ~
$ df
Filesystem 1K-blocks Used Available Use% Mounted on
C:\cygwin\bin 19535008 15533344 4001664 80% /usr/bin
C:\cygwin\lib 19535008 15533344 4001664 80% /usr/lib
C:\cygwin 19535008 15533344 4001664 80% /
c: 19535008 15533344 4001664 80% /cygdrive/c
d: 19525456 17395040 2130416 90% /cygdrive/d
e: 19525456 18191296 1334160 94% /cygdrive/e
f: 19533472 6457312 13076160 34% /cygdrive/f
k: 285194 285194 0 100% /cygdrive/k想进D盘便可以这样:
MrYang@cs-aewjqhvksxfj ~
$ cd /cygdrive/dMrYang@cs-aewjqhvksxfj /cygdrive/d
在Cygwin下还可以运行Windows下的程序,如下:
MrYang@cs-aewjqhvksxfj /cygdrive/d
$ cmd.exe
Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.d:\>
d:\>exit
MrYang@cs-aewjqhvksxfj /cygdrive/d
$很明显的,直接输入CMD.EXE便可以得到一个本机CMDSHELL,这样你想运行什么程序都可以了。出到Cygwin的Bash shell需要使用exit命令,
-
2007-04-23
Cygwin的进程管理命令 - [开发手记]
启动Cygwin以后,会在Windows下得到一个Bash Shell,由于Cygwin是以Windows下的服务运行的,所以很多情况下和在Linux下有很大的不同工作环境。
命令:ps,相当于Windows下的TM(任务管理器),直接Ps的话么得到的会是Cygwin下的Shell的进程如下:
MrYang@cs-aewjqhvksxfj ~
$ ps
PID PPID PGID WINPID TTY UID STIME COMMAND
3488 1 3488 3488 con 1003 21:25:41 /usr/bin/bash
1524 3488 1524 1328 con 1003 21:25:48 /usr/bin/ps如果要在Cygwin下查看Windows的进程,可加上参数-W(注意是大写的W)。这时显示出来的进程就非常多了。
PS的相关用法:
Usage ps [-aefl] [-u uid]
-f = show process uids, ppids
-l = show process uids, ppids, pgids, winpids
-u uid = list processes owned by uid
-a, -e = show processes of all users
-s = show process summary
-W = show windows as well as cygwin processes