•   原来一直以为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;
    }

  •   在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的输出结果放到当前行 。

  •   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 generator

    SYNOPSIS
    yacc [-dlrtv] [-b file_prefix] [-o output_filename] [-p symbol_prefix]
    filename

    ……

    要退出只需要按“Q” 即可退出。

    当然你也可以使用:info info来查看命令info的说明信息。

  • 在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/d

    MrYang@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命令,

  • 启动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