当前位置:首页 » 网络管理 » c语言如何删除用户组
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言如何删除用户组

发布时间: 2023-01-22 02:59:42

Ⅰ 最常用DOS命令

DOS命令全集

一)MD——建立子目录
1.功能:创建新的子目录
2.类型:内部命令
3.格式:MD[盘符:][路径名]〈子目录名〉
4.使用说明:

(1)“盘符”:指定要建立子目录的磁盘驱动器字母,若省略,则为当前驱动器;
(2)“路径名”:要建立的子目录的上级目录名,若缺省则建在当前目录下。

例:(1)在C盘的根目录下创建名为FOX的子目录;(2)在FOX子目录下再创建USER子目录。
C:、>MD FOX (在当前驱动器C盘下创建子目录FOX)
C:、>MD FOX 、USER (在FOX 子目录下再创建USER子目录)
(二)CD——改变当前目录
1.功能:显示当前目录
2.类型:内部命令
3.格式:CD[盘符:][路径名][子目录名]
4.使用说明:
(1)如果省略路径和子目录名则显示当前目录;
(2)如采用“CD、”格式,则退回到根目录;
(3)如采用“CD.。”格式则退回到上一级目录。
例:(1)进入到USER子目录;(2)从USER子目录退回到子目录;(3)返回到根目录。
C:、>CD FOX 、USER(进入FOX子目录下的USER子目录)
C:、FOX、USER>CD.。 (退回上一级根目录)
C:、FOX>CD、 (返回到根目录)
C:、>
(三)RD——删除子目录命令
1.功能:从指定的磁盘删除了目录。
2.类型:内部命令
3.格式:RD[盘符:][路径名][子目录名]
4.使用说明:
(1)子目录在删除前必须是空的,也就是说需要先进入该子目录,使用DEL(删除文件的命令)将其子目录下的文件删空,然后再退回到上一级目录,用RD命令删除该了目录本身;
(2)不能删除根目录和当前目录。
例:要求把C盘FOX子目录下的USER子目录删除,操作如下:
第一步:先将USER子目录下的文件删空;
C、>DEL C:、FOX、USER、*。*
第二步,删除USER子目录。
C、>RD C:、FOX、USER
(四)DIR——显示磁盘目录命令
1.功能:显示磁盘目录的内容。
2.类型:内部命令
3.格式:DIR [盘符][路径][/P][/W]
4. 使用说明:/P的使用;当欲查看的目录太多,无法在一屏显示完屏幕会一直往上卷,不容易看清,加上/P参数后,屏幕上会分面一次显示23行的文件信息,然后暂停,并提示;Press any key to continue
/W的使用:加上/W只显示文件名,至于文件大小及建立的日期和时间则都省略。加上参数后,每行可以显示五个文件名。
PATH——路径设置命令
1.功能:设备可执行文件的搜索路径,只对文件有效。
2.类型:内部命令
3.格式:PATH[盘符1]目录[路径名1]{[;盘符2:],〈目录路径名2〉…}
4.使用说明:
(1)当运行一个可执行文件时,DOS会先在当前目录中搜索该文件,若找到则运行之;若找不到该文件,则根据PATH命令所设置的路径,顺序逐条地到目录中搜索该文件;
(2)PATH命令中的路径,若有两条以上,各路径之间以一个分号“;”隔开;
(3)PATH命令有三种使用方法:
PATH[盘符1:][路径1][盘符2:][路径2]…(设定可执行文件的搜索路径)
PATH:(取消所有路径)
PATH:(显示目前所设的路径)
(六)TREE——显示磁盘目录结构命令
1.功能:显示指定驱动器上所有目录路径和这些目录下的所有文件名。
2.类型:外部命令
3.格式:TREE[盘符:][/F][》PRN]
4.使用说明:
(1)使用/F参数时显示所有目录及目录下的所有文件,省略时,只显示目录,不显示目录下的文件;
(2)选用>PRN参数时,则把所列目录及目录中的文件名打印输出。
(七)DELTREE——删除整个目录命令
1.功能:将整个目录及其下属子目录和文件删除。
2.类型:外部命令
3.格式:DELTREE[盘符:]〈路径名〉
4.使用说明:该命令可以一步就将目录及其下的所有文件、子目录、更下层的子目录一并删除,而且不管文件的属性为隐藏、系统或只读,只要该文件位于删除的目录之下,DELTREE都一视同仁,照删不误。使用时务必小心!!!

五、磁盘操作类命令

(一)FORMAT——磁盘格式化命令
1.功能:对磁盘进行格式化,划分磁道和扇区;同时检查出整个磁盘上有无带缺陷的磁道,对坏道加注标记;建立目录区和文件分配表,使磁盘作好接收DOS的准备。
2.类型:外部命令
3.格式:FORMAT〈盘符:〉[/S][/4][/Q]
4.使用说明:
(1)命令后的盘符不可缺省,若对硬盘进行格式化,则会如下列提示:WARNING:ALL DATA ON NON ——REMOVABLE DISK
DRIVE C:WILL BE LOST !
Proceed with Format (Y/N)?
(警告:所有数据在C盘上,将会丢失,确实要继续格式化吗?)
(2)若是对软盘进行格式化,则会如下提示:Insert mew diskette for drive A;
and press ENTER when ready…
(在A驱中插入新盘,准备好后按回车键)。
(3)选用[/S]参数,将把DOS系统文件IO.SYS 、MSDOS.SYS及COMMAND.COM复制到磁盘上,使该磁盘可以做为DOS启动盘。若不选用/S参数,则格式化后的磙盘只能读写信息,而不能做为启动盘;
(4)选用[/4]参数,在1.2MB的高密度软驱中格式化360KB的低密度盘;
(5)选用[/Q]参数,快速格式化,这个参数并不会重新划分磁盘的磁道貌岸然和扇区,只能将磁盘根目录、文件分配表以及引导扇区清成空白,因此,格式化的速度较快。
(6)选用[/U]参数,表示无条件格式化,即破坏原来磁盘上所有数据。不加/U,则为安全格式化,这时先建立一个镜象文件保存原来的FAT表和根目录,必要时可用UNFORRMAT恢复原来的数据。
(二)UNFORMAT恢复格式化命令
1.功能:对进行过格式化误操作丢失数据的磁盘进行恢复。
2.类型:外部命令
3.格式:UNFORMAT〈盘符〉[/L][/U][/P][/TEST]
4.使用说明:用于将被“非破坏性”格式化的磁盘恢复。根目录下被删除的文件或子目录及磁盘的系统扇区(包括FAT、根目录、BOOT扇区及硬盘分区表)受损时,也可以用UNFORMAT来抢救。
(1)选用/L参数列出找到的子目录名称、文件名称、大孝日期等信息,但不会真的做FORMAT工作。
(2)选用/P参数将显示于屏幕的报告(包含/L参数所产生的信息)同时也送到打印机。运行时屏幕会显示:“Print out will be sent to LPT1”
(3)选用/TEST参数只做模拟试验(TEST)不做真正的写入动作。使用此参数屏幕会显示:“Simulation only”
(4)选用/U参数不使用MIRROR映像文件的数据,直接根据磁盘现状进行UNFORMAT。
(5)选用/PSRTN;修复硬盘分区表。
若在盘符之后加上/P、/L、/TEST之一,都相当于使用了/U参数,UNFORMAT会“假设”此时磁盘没有MIRROR映像文件。
注意:UNFORMAT对于刚FORMAT的磁盘,可以完全恢复,但FORMAT后若做了其它数据的写入,则UNFORMAT就不能完整的救回数据了。UNFORMAT并非是万能的,由于使用UNFORMAT会重建FAT与根目录,所以它也具有较高的危险性,操作不当可能会扩大损失,如果仅误删了几个文件或子目录,只需要利用UNDELETE就够了。
三) CHKDSK——检查磁盘当前状态命令
1.功能:显示磁盘状态、内存状态和指定路径下指定文件的不连续数目。
2.类型:外部命令
3.格式:CHKDSK [盘符:][路径][文件名][/F][/V]
4.使用说明:
(1)选用[文件名]参数,则显示该文件占用磁盘的情况;
(2)选[/F]参数,纠正在指定磁盘上发现的逻辑错误;
(3)选用[/V]参数,显示盘上的所有文件和路径。
(四)DISKCOPY——整盘复制命令
1.功能:复制格式和内容完全相同的软盘。
2.类型:外部命令
3.格式:DISKCOPY[盘符1:][盘符2:]
4.使用说明:
(1)如果目标软盘没有格式化,则复制时系统自动选进行格式化。
(2)如果目标软盘上原有文件,则复制后将全部丢失。
(3)如果是单驱动器复制,系统会提示适时更换源盘和目标盘,请操作时注意分清源盘和目标盘。
(五)LABEL——建立磁盘卷标命令
1.功能:建立、更改、删除磁盘卷标。
2.类型:外部命令
3.格式:LABEL[盘符:][卷标名]
4.使用说明:
(1)卷标名为要建立的卷标名,若缺省此参数,则系统提示键入卷标名或询问是否删除原有的卷标名;
(2)卷标名由1至11个字符组成。
(六)VOL——显示磁盘卷标命令
1.功能:查看磁盘卷标号。
2.类型:内部命令
3.格式:VOL[盘符:]
4.使用说明:省略盘符,显示当前驱动器卷标。
(七)SCANDISK——检测、修复磁盘命令
1.功能:检测磁盘的FAT表、目录结构、文件系统等是否有问题,并可将检测出的问题加以修复。
2.类型:外部命令
3.格式:SCANDISK[盘符1:]{[盘符2:]…}[/ALL]
4.使用说明:
(1)CCANDISK适用于硬盘和软盘,可以一次指定多个磁盘或选用[/ALL]参数指定所有的磁盘;
(2)可自动检测出磁盘中所发生的交叉连接、丢失簇和目录结构等逻辑上的错误,并加以修复。
(八)DEFRAG——重整磁盘命令
1.。功能:整理磁盘,消除磁盘碎块。
2.类型:外部命令
3.格式:DEFRAG[盘符:][/F]
4.使用说明:选用/F参数,将文件中存在盘上的碎片消除,并调整磁盘文件的安排,确保文件之间毫无空隙。从而加快读盘速度和节省磁盘空间。
(九)SYS——系统复制命令
1.功能:将当前驱动器上的DOS系统文件IO.SYS,MSDOS.SYS和COMMAND.COM 传送到指定的驱动器上。
2.类型:外部命令
3.格式:SYS[盘符:]
*使用说明:如果磁盘剩余空间不足以存放系统文件,则提示:No roomfor on destination disk.
文件操作类命令
(一) COPY文件复制命令
1.功能:拷贝一个或多个文件到指定盘上。
2.类型:内部命令
3.格式:COPY [源盘][路径]〈源文件名〉[目标盘][路径][目标文件名]
4.使用说明:
(1)COPY是文件对文件的方式复制数据,复制前目标盘必须已经格式化;
(2)复制过程中,目标盘上相同文件名称的旧文件会被源文件取代;
(3)复制文件时,必须先确定目标般有足够的空间,否则会出现;insufficient的错误信息,提示磁盘空间不够;
(4)文件名中允许使用通配举“*”“?”,可同时复制多个文件;
(5)COPY命令中源文件名必须指出,不可以省略。
(6)复制时,目标文件名可以与源文件名相同,称作“同名拷贝”此时目标文件名可以省略;
(7)复制时,目标文件名也可以与源文件名不相同,称作“异名拷贝”,此时,目标文件名不能省略;
(8)复制时,还可以将几个文件合并为一个文件,称为“合并拷贝”,格式如下:COPY;[源盘][路径]〈源文件名1〉〈源文件名2〉…[目标盘][路径]〈目标文件名〉;
(9)利用COPY命令,还可以从键盘上输入数据建立文件,格式如下:COPY CON [盘符:][路径]〈文件名〉;
(10)注意:COPY命令的使用格式,源文件名与目标文件名之间必须有空格!
(二)XCOPY——目录复制命令
1.功能:复制指定的目录和目录下的所有文件连同目录结构。
2.类型:外部命令
3.格式:XCOPY [源盘:]〈源路径名〉[目标盘符:][目标路径名][/S][/V][/E]
4.使用说明:
(1)XCOPY是COPY的扩展,可以把指定的目录连文件和目录结构一并拷贝,但不能拷贝隐藏文件和系统文件;
(2)使用时源盘符、源目标路径名、源文件名至少指定一个;
(3)选用/S时对源目录下及其子目录下的所有文件进行COPY。除非指定/E参数,否则/S不会拷贝空目录,若不指定/S参数,则XCOPY只拷贝源目录本身的文件,而不涉及其下的子目录;
(4)选用/V参数时,对的拷贝的扇区都进行较验,但速度会降低。
(三)TYPE——显示文件内容命令
1.功能:显示ASCII码文件的内容。
2.类型:内部命令。
3.格式:TYPE[盘符:][路径]〈文件名〉
4.使用说明:
(1)显示由ASCII码组成的文本文件,对。EXE.COM等为扩展名的文件,其显示的内容是无法阅读的,没有实际意义2;
(2)该命令一次只可以显示一个文件的内容,不能使用通配符;
(3)如果文件有扩展名,则必须将扩展名写上;
(4)当文件较长,一屏显示不下时,可以按以下格式显示;TYPE[盘符:][路径]〈文件名〉|MORE,MORE为分屏显示命令,使用些参数后当满屏时会暂停,按任意键会继续显示。
(5)若需将文件内容打印出来,可用如下格式:
TYPE[盘符:][路径]〈文件名〉,>PRN
此时,打印机应处于联机状态。
(四) REN——文件改名命令
1.功能:更改文件名称
2.类型:内部命令
3.格式:REN[盘符:][路径]〈旧文件名〉〈新文件名〉
4.使用说明:
(1)新文件名前不可以加上盘符和路径,因为该命令只能对同一盘上的文件更换文件名;
(2)允许使用通配符更改一组文件名或扩展名。
(五)FC——文件比较命令
1.功能:比较文件的异同,并列出差异处。
2.类型:外部命令
3.格式:FC[盘符:][路径名]〈文件名〉[盘符:][路径名][文件名][/A][/B][/C][/N]
4.使用说明:
(1)选用/A参数,为ASCII码比较模式;
(2)选用/B参数,为二进制比较模式;
(3)选用/C参数,将大小写字符看成是相同的字符。
(4)选用/N参数,在ASCII码比较方式下,显示相异处的行号。
(六)ATTRIB——修改文件属性命令
1.功能:修改指定文件的属性。(文件属性参见2.5.4(二)文件属性一节)
2.类型:外部命令。
3.格式:ATTRIB[文件名][R][——R][A][——A][H][——H][——S]
4.使用说明:
(1)选用R参数,将指定文件设为只读属性,使得该文件只能读取,无法写入数据或删除;选用——R参数,去除只读属性;
(2)选用A参数,将文件设置为档案属性;选用——A参数,去除档案属性;
(3)选用H参数,将文件调协为隐含属性;选用——H参数,去隐含属性;
(4)选用S参数,将文件设置为系统属性;选用——S参数,去除系统属性;
(5)选用/S参数,对当前目录下的所有子目录及作设置。
七) DEL——删除文件命令
1.功能:删除指定的文件。
2.类型:内部命令
3.格式:DEL[盘符:][路径]〈文件名〉[/P]
4.使用说明:
(1)选用/P参数,系统在删除前询问是否真要删除该文件,若不使用这个参数,则自动删除;
(2)该命令不能删除属性为隐含或只读的文件;
(3)在文件名称中可以使用通配符;
(4)若要删除磁盘上的所有文件(DEL*·*或DEL·),则会提示:(Arey ou sure?)(你确定吗?)若回答Y,则进行删除,回答N,则取消此次删除作业。
(八) UNDELETE——恢复删除命令
1.功能:恢复被误删除命令
2.类型:外部命令。
3.格式:UNDELETE[盘符:][路径名]〈文件名〉[/DOS]/LIST][/ALL]
4.使用说明:使用UNDELETE可以使用“*”和“?”通配符。
(1)选用/DOS参数根据目录里残留的记录来恢复文件。由于文件被删除时,目录所记载斩文件名第一个字符会被改为E5,DOS即依据文件开头的E5和其后续的字符来找到欲恢复的文件,所以,UNDELETE会要求用户输入一个字符,以便将文件名字补齐。但此字符不必和原来的一样,只需符合DOS的文件名规则即可。
(2)选用/LIST只“列出”符合指定条件的文件而不做恢复,所以对磁盘内容完全不会有影响。
(3)选用/ALL自动将可完全恢复的文件完全恢复,而不一一地询问用户,使用此参数时,若UNDELTE利用目录里残留的记录来将文件恢复,则会自动选一个字符将文件名补齐,并且使其不与现存文件名相同,选用字符的优选顺序为:#%——0000123456789A~Z。
UNDELETE还具有建立文件的防护措施的功能,已超出本课程授课范围,请读者在使用些功能时查阅有关DOS手册。
七、其它命令
(一)CLS——清屏幕命令
1功能:清除屏幕上的所有显示,光标置于屏幕左上角。
2类型:内部命令
3格式:CLS
(二) VER查看系统版本号命令
1功能:显示当前系统版本号
2类型:内部命令
3格式:VER
(三) DATA日期设置命令
1功能:设置或显示系统日期。
2类型:内部命令
3格式:DATE[mm——dd——yy]
4使用说明:
(1)省略[mm——dd——yy]显示系统日期并提示输入新的日期,不修改则可直接按回车键,[mm——dd——yy]为“月月——日日——年年”格式;
(2)当机器开始启动时,有自动处理文件(AUTOEXEC.BAT)被执行,则系统不提示输入系统日期。否则,提示输入新日期和时间。
(四) TIME系统时钟设置命令
1功能:设置或显示系统时期。
2类型:内部命令
3格式:TIME[hh:mm:ss:xx]
4使用说明:
(1)省略[hh:mm:ss:xx],显示系统时间并提示输入新的时间,不修改则可直接按回车键,[hh:mm:ss:xx]为“小时:分钟:秒:百分之几秒”格式;
(2)当机器开始启动时,有自动处理文件(AUTOEXEC.BAT)被执行,则系统不提示输入系统日期。否则,提示输入新日期和时间。
(五)MEM查看当前内存状况命令
1功能:显示当前内存使用的情况
2类型:外部命令
3格式:MEM[/C][/F][/M][/P]
4使用说明:
(1)选用/C参数列出装入常规内存和CMB的各文件的长度,同时也显示内存空间的使用状况和最大的可用空间;
(2)选用/F参数分别列出当前常规内存剩余的字节大小和UMB可用的区域及大小;
(3)选用/M参数显示该模块使用内存地地址、大小及模块性质;
(4)选用/P参数指定当输出超过一屏时,暂停供用户查看。
(六) MSD显示系统信息命令
1功能:显示系统的硬件和操作系统的状况。
2类型:外部命令
3格式:MSD[/I][/B][/S]
4使用说明:
(1)选用/I参数时,不检测硬件;
(2)选用/B参数时,以黑白方式启动MSD;
(3)选用/S参数时,显示出简明的系统报告。

net命令全集

网络命令之:net命令

许多 Windows NT 网络命令以 net 开始。这些 net 命令有一些公共属性:
通过键入 net /? 可查阅所有可用的 net 命令。
通过键入 net help 命令可在命令行中获得 net 命令的语法帮助。例如,要得到 net acco
unts 命令的帮助,请键入 net help accounts。
所有 net 命令接受选项 / yes 和 /no(可缩写为 / y 和 /n )。/ y 对命令产生的任何交
互提示自动回答“是”,/n 回答“否”。例如,net stop server 通常提示确认是否根据服
务器服务结束所有服务,net stop server /y 自动回答“是”并关闭服务器服务。

Net Accounts

更新用户帐号数据库、更改密码及所有帐号的登录要求。必须要在更改帐号参数的计算机上
运行网络登录服务。
net accounts [/forcelogoff:{minutes | no}] [/minpwlen:length] [/maxpwage:{days |
unlimited}] [/minpwage:days] [/uniquepw:number] [/domain]
net accounts [/sync] [/domain]
参数

键入不带参数的 net accounts,将显示当前密码设置、登录时限及域信息。
/forcelogoff:{minutes | no}
设置当用户帐号或有效登录时间过期时,结束用户和服务器会话前的等待时间。no 选项禁止
强行注销。该参数的默认设置为 no。
指定 /forcelogoff:minutes 之后,Windows NT 在其强制用户退出网络 minutes 分钟之前
,将给用户发出警报。如果还有打开的文件,Windows NT 将警告用户。如果 minutes 小于
两分钟,Windows NT 警告用户立即从网络注销。
/minpwlen:length
设置用户帐号密码的最少字符数。允许范围是 0-14,默认值为 6。
/maxpwage:{days | unlimited}
设置用户帐号密码有效的最大天数。unlimited 不设置最大天数。/maxpwage 选项的天数必
须大于 /minpwage。允许范围是 1-49,710 天 (unlimited)。默认值为 90 天。
/minpwage:days
设置用户必须保持原密码的最小天数。 0 值不设置最小时间。允许范围是 0-49,710 天,默
认值为 0 天。
/uniquepw:number
要求用户更改密码时,必须在经过 number 次后,才能重复使用与之相同的密码。允许范围
是 0-8。默认值为 5。
/domain
在当前域的主域控制器上执行该操作。否则只在本地计算机执行操作。
该参数仅用于 Windows NT Server 域中的 Windows NT Workstation 计算机,Windows NT
Server 计算机默认为在主域控制器执行操作。
/sync
当用于主域控制器时,该命令使域中所有备份域控制器同步;当用于备份域控制器时,该命
令仅使该备份域控制器与主域控制器同步。该命令仅适用于 Windows NT Server 域成员的计
算机。

Net Computer

从域数据库中添加或删除计算机。该命令仅在运行 Windows NT Server 的计算机上可用。
net computer \computername {/add | /del}
参数
\computername
指定要添加到域或从域中删除的计算机。
/add
将指定计算机添加到域。
/del
将指定计算机从域中删除。

Net Config

显示当前运行的可配置服务,或显示并更改某项服务的设置。
net config [service [options]]
参数

键入不带参数的 net config 将显示可配置服务的列表。
service
通过 net config 命令进行配置的服务(server 或 workstation)。
options
服务的特定选项。完整语法请参阅 net config server 或 net config workstation。

Net Config Server

运行服务时显示或更改服务器的服务设置。
net config server [/autodisconnect:time] [/srvcomment:"text "] [/hidden:{yes | n
o}]
参数

键入不带参数的 net config server,将显示服务器服务的当前配置。
/autodisconnect:time
设置断开前用户会话闲置的最大时间值。可以指定 -1,表示永不断开连接。允许范围是 -1
-65535 分钟,默认值是 15 分钟。
/srvcomment:"text "
为服务器添加注释,可以通过 net view 命令在屏幕上显示所加注释。注释最多可达 48 个
字符,文字要用引号引住。
/hidden:{yes | no}
指定服务器的计算机名是否出现在服务器列表中。请注意隐含某个服务器并不改变该服务器
的权限。默认为 no。

Net Config Workstation

服务运行时,显示或更改工作站各项服务的设置。
net config workstation [/charcount:bytes] [/chartime:msec] [/charwait:sec]
参数

键入不带参数的 net config workstation 将显示本地计算机的当前配置。
/charcount:bytes
指定 Windows NT 在将数据发送到通讯设备之前收集的数据量。如果同时设置 /chartime:m
sec 参数,Windows NT 按首先满足条件的选项运行。允许范围是 0-65535 字节,默认值是
16 字节。
/chartime:msec
指定 Windows NT 在将数据发送到通讯设备之前收集数据的时间。如果同时设置 /charcoun
t:bytes 参数,Windows NT 按首先满足条件的选项运行。允许范围是 0-65535000 毫秒,默
认值是 250 毫秒。
/charwait:sec
设置 Windows NT 等待通讯设备变为可用的时间。允许的范围是 0-65535 秒,默认值是 36
00 秒。

Net Continue

重新激活挂起的服务。
net continue service
参数
service
能够继续运行的服务,包括: file server for macintosh(该服务仅限于 Windows NT Se
rver), ftp publishing service, lpdsvc, net logon, network dde,network dde dsdm
,nt lm security support provider,remoteboot(该服务仅限于 Windows NT Server),
remote access server, schele,server,simple tcp/ip services 及 workstation 。

Net File

显示某服务器上所有打开的共享文件名及锁定文件数。该命令也可以关闭个别文件并取消文
件锁定。
net file [id [/close]]
参数

键入不带参数的 net file 可获得服务器上打开文件的列表。
id
文件标识号。
/close
关闭打开的文件并释放锁定记录。请从共享文件的服务器中键入该命令。

Net Group

在 Windows NT Server 域中添加、显示或更改全局组。该命令仅在 Windows NT Server 域
中可用。
net group [groupname [/comment:"text "]] [/domain]
net group groupname {/add [/comment:"text "] | /delete} [/domain]
net group groupname username [ ...] {/add | /delete} [/domain]
参数

键入不带参数的 net group 可以显示服务器名称及服务器的组名称。
groupname
要添加、扩展或删除的组。仅提供某个组名便可查看组中的用户列表。
/comment:"text "
为新建组或现有组添加注释。注释最多可以是 48 个字符,并用引号将注释文字引住。
/domain
在当前域的主域控制器中执行该操作,否则在本地计算机上执行操作。
该参数仅用于作为 Windows NT Server 域成员的 Windows NT Workstation 计算机。Windo
ws NT Server 计算机默认为在主域控制器中操作。
username[ ...]
列表显示要添加到组或从组中删除的一个或多个用户。使用空格分隔多个用户名称项。
/add
添加组或在组中添加用户名。必须使用该命令为添加到组中的用户建立帐号。
/delete
删除组或从组中删除用户名。

Net Help

提供网络命令列表及帮助主题,或提供指定命令或主题的帮助。可用网络命令列于 N 下面的
“命令参考”中“命令”窗口内。
net help [command]
net command {/help | /?}
参数

键入不带参数的 net

Ⅱ 大一c语言编程题

车票根据题意两两站点连线生成,金额和数量分别用随机数。

数据存储:站点,车票,用户分别为3个结构体,用于对应数据库。

购买流程:检查输入数值有效性->检查车票库存->购买成功同步修改用户购买流水及车票库存。(这里题目需求不明确,没有指明用户购买方式),我的代码允许一个用户同时购买多种票,每种票可分批购买多张。购买流水记录自动增加和更新。

退票流程:检查输入和用户购买记录,同步更新用户及车票信息。

删除流程:选择删除没有被用户购买的票(函数检查所有用户,虽然本题只要一个用户,实际传参用户数组首地址)。

PS: 这个题目涉及到增删改,用链表来写更好,但考虑你学习范围,没有使用链表而是动态数组,动态数组删除,考虑内存占用,不仅要需循环移位还要释放多余地址。

另外整体程序,异常的处理我只是单纯返回0或者1或者-1区分基本的成功与失败。你如想对个别异常进行特殊处理,自行修改返回值,接收判断。

下面是代码:

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <time.h>

#include <windows.h>

#include <conio.h>

#define MS 5//最大站点数

typedef struct station

{

char sid[10];

char sName[20];

}STN;

typedef struct ticket

{

int tid;//票编号

STN *ssP;//起始站

STN *tsP;//终点站

int value;//票价

int number;//数量

}TKT;

typedef struct userInfo//用户

{

char uid[20];//身份证号

int cnt;//购买的票种类数量

int *btids;//购买的所有票id数组

int *btNum;//购买的所有票数量数组

}UIFO;

int init(STN stns[MS],TKT **tkts);//初始化车站、票数据

int disAllTickets(TKT *tkts);

int buyTicket(UIFO *uifo,TKT *tkts);//异常返回0

int reTicket(UIFO *uifo,TKT *tkts);//异常返回0

int showMenu(UIFO *uifo,TKT *tkts);

int delIntByIndex(int *nums,int len,int index);//通过下标index删除动态整型数组nums对应元素,并释放多余地址,返回删除后的数组长度,异常返回-1

int delTkts(UIFO *uifos,int len,TKT *tkts);//删除指定票(检查用户组,只要有一个用户购买,无法删除)

int cnt;//票种类数量

int main()

{


STN stns[MS];

TKT *tkts=NULL;

UIFO uifo={"321002199902050614",0,NULL,NULL};

srand(time(NULL));

cnt=init(stns,&tkts);

printf("共生成%d组票(每组往返两种票,共%d种票) ",cnt/2,cnt);

printf("按任意键继续。。。。 "),getch();

system("cls");

showMenu(&uifo,tkts);

return 0;

}

int showMenu(UIFO *uifo,TKT *tkts)

{

int n=5;

printf("(1) Buy ticket ");

printf("(2) Refund ticket ");

printf("(3) Remove ticket ");

printf("(4) Display all tickets ");

printf("(0) Exit ");

while(n<0 || n>4)

scanf("%d",&n);

switch(n)

{

case 0: return 0;

case 1: if(!buyTicket(uifo,tkts)) return 0;break;

case 2: if(!reTicket(uifo,tkts)) return 0;break;

case 3: if(!delTkts(uifo,1,tkts)) return 0;break;

//这里删除功能,用户多名,要传数组首地址,由于演示只有一个用户(len=对应用户数),所以只传该用户地址(len=1)

case 4: disAllTickets(tkts);break;

}

showMenu(uifo,tkts);

return 1;

}

int disAllTickets(TKT *tkts)

{

int i;

for(i=0;i<cnt;i++)

printf("编号:%2d 路程:%s-%s 票价:%3d 剩余票数:%d ",tkts[i].tid,tkts[i].ssP->sName,tkts[i].tsP->sName,tkts[i].value,tkts[i].number);

printf("按任意键继续。。。。 "),getch();

system("cls");

return 1;

}

int delIntByIndex(int *nums,int len,int index)

{

int i,*temp=NULL;

if(index>len-1) return -1;

for(i=index;i<len-1;i++)

nums[i]=nums[i+1];

len--;

if(len)

{

temp=(int *)realloc(nums,sizeof(int)*len);

if(!temp) return -1;

nums=temp;

}

else

free(nums);

return len;

}

int reTicket(UIFO *uifo,TKT *tkts)

{

int i,j,tid,n,index,len,flag=0;

printf("当前用户购买记录: ");

for(i=0;i<uifo->cnt;i++)

{

for(j=0;j<cnt;j++)

if(tkts[j].tid==uifo->btids[i]) index=j;

printf("--车票编号:%d,起末站:%s-%s,购买票数:%d ",uifo->btids[i],tkts[index].ssP->sName,tkts[index].tsP->sName,uifo->btNum[i]);

}

printf("请输入要退票的车票id及票数:"),scanf("%d%d",&tid,&n);

for(i=0;i<uifo->cnt;i++)

if(uifo->btids[i]==tid && uifo->btNum[i]>=n)

{

for(j=0;j<cnt;j++)

if(tkts[j].tid==uifo->btids[i]) tkts[j].number+=n;//同步修改对应车票剩余票数

uifo->btNum[i]-=n;//用户购买记录修改

if(uifo->btNum[i]==0)//某种车票全部退完,删除该条记录

{

len=delIntByIndex(uifo->btNum,uifo->cnt,i);

if(len==-1) return 0;

len=delIntByIndex(uifo->btids,uifo->cnt,i);

if(len==-1) return 0;

uifo->cnt=len;

}

flag=1;

break;

}

if(flag)

printf("退票成功! ");

else

printf("无此购买记录或输入数量不符合 ");

printf("按任意键继续。。。。 "),getch();

system("cls");

return 1;

}

int buyTicket(UIFO *uifo,TKT *tkts)

{

char spn[20],tpn[20];

int i,n=-1,index=-1,*temp=NULL;

for(i=0;i<cnt;i++)

printf("编号:%2d 路程:%s-%s 票价:%3d 剩余票数:%d ",tkts[i].tid,tkts[i].ssP->sName,tkts[i].tsP->sName,tkts[i].value,tkts[i].number);

printf("请输入始发站站名和终点站站名:"),scanf("%s%s",spn,tpn);

for(i=0;i<cnt;i++)

if(strcmp(tkts[i].ssP->sName,spn)==0 && strcmp(tkts[i].tsP->sName,tpn)==0)

{

printf("车票%s-%s 票价:%3d 剩余票数:%d ",tkts[i].ssP->sName,tkts[i].tsP->sName,tkts[i].value,tkts[i].number);

index=i;

break;

}

if(index==-1)

printf("购买失败!无此路程的车票 ");

else

{

while(n<=0)

{

printf("请输入要购买的数量(大于0):"),scanf("%d",&n);

if(tkts[index].number<n)

printf("错误:车票数量不足或者输入数值超出范围!请重新输入! "),n=-1;

}

for(i=0;i<uifo->cnt;i++)//检查用户购买记录,重复票累加购买数量,不同票新增记录

{

if(uifo->btids[i]==tkts[index].tid)

{

printf("该票已购买了%d张,现再次购买%d张,累计购买了%d张 ",uifo->btNum[i],n,uifo->btNum[i]+n);

uifo->btNum[i]+=n;

tkts[index].number-=n;

break;

}

}

if(i==uifo->cnt)//未检查到重复记录,新增

{

if(!uifo->btids)

{

uifo->btids=(int *)malloc(sizeof(int));

if(!uifo->btids) return 0;

uifo->btNum=(int *)malloc(sizeof(int));

if(!uifo->btNum) return 0;

}

else

{

temp=(int *)realloc(uifo->btids,sizeof(int)*(uifo->cnt+1));

if(!temp) return 0;

uifo->btids=temp;

temp=(int *)realloc(uifo->btNum,sizeof(int)*(uifo->cnt+1));

if(!temp) return 0;

uifo->btNum=temp;

}

uifo->btids[uifo->cnt]=tkts[index].tid;

printf("该票购买了%d张 ",(uifo->btNum[uifo->cnt]=n));

tkts[index].number-=n;

uifo->cnt++;

printf("用户购买记录: ");

for(i=0;i<uifo->cnt;i++)

printf("--车票编号:%d,购买票数:%d ",uifo->btids[i],uifo->btNum[i]);

}

printf("本次成功购买了%s-%s的票%d张! ",tkts[index].ssP->sName,tkts[index].tsP->sName,n);

}

printf("按任意键继续。。。。 "),getch();

system("cls");

return 1;

}

int delTkts(UIFO *uifos,int len,TKT *tkts)//len:所有购买的用户数量

{

int i,j,k,tid,flag=0,index;

for(i=0;i<cnt;i++)

printf("编号:%2d 路程:%s-%s 票价:%3d 剩余票数:%d ",tkts[i].tid,tkts[i].ssP->sName,tkts[i].tsP->sName,tkts[i].value,tkts[i].number);

printf("请输入要删除的车票编号:"),scanf("%d",&tid);

for(i=0;i<cnt;i++)

if(tid==tkts[i].tid)

{

index=i;

flag=1;

for(j=0;j<len;j++)//检查所有用户购买记录

{

for(k=0;k<uifos[j].cnt;k++)

if(uifos[j].btids[k]==tid)

{

flag=0;

printf("该票已被用户购买,无法删除,需先完成退票! ");

break;

}

if(!flag)

break;

}

break;

}

if(!flag) printf(" 删除失败,输入数值超出范围或不可删除! ");

else

{

cnt--;

if(cnt==0)

{

free(tkts[index].ssP);

free(tkts[index].tsP);

free(&tkts[index]);

}

else

{

free(tkts[index].ssP);

free(tkts[index].tsP);

for(i=index;i<cnt;i++)

tkts[i]=tkts[i+1];

tkts[cnt].ssP=NULL;

tkts[cnt].tsP=NULL;

free(&tkts[cnt]);

}

printf(" 删除成功! ");

}

printf("按任意键继续。。。。 "),getch();

system("cls");

return 1;

}

int init(STN stns[MS],TKT **tkts)

{

TKT *tTemp=NULL;

int i,j,n,v,cnt=2;

static int id=1;

printf("生成站点: ");

for(i=0;i<MS;i++,id++)

{

sprintf(stns[i].sid,"车站%03d",id);

sprintf(stns[i].sName,"SN%03d",id);

printf("----站点名:%s。站点ID:%s ",stns[i].sid,stns[i].sName);

}

printf("计算所有站点连线,生成车票(票是往返,所以一次生成往返两组票): ");

for(i=0;i<MS;i++)

for(j=i+1;j<MS;j++)

{

if(!(*tkts))

{

*tkts=(TKT *)malloc(sizeof(TKT)*2);

if(!(*tkts)) return -1;

}

else

{

tTemp=(TKT *)realloc((*tkts),sizeof(TKT)*cnt);

if(!tTemp) return -1;

*tkts=tTemp;

}

n=rand()%4+2;//每种票随机2~5张(保证总数大于20)

v=rand()%201+50;//随机生成票价50~250

(*tkts)[cnt-1].tid=cnt;

(*tkts)[cnt-1].ssP=&stns[i];

(*tkts)[cnt-1].tsP=&stns[j];

(*tkts)[cnt-1].value=v;

(*tkts)[cnt-1].number=n;

(*tkts)[cnt-2].tid=cnt-1;

(*tkts)[cnt-2].ssP=&stns[j];

(*tkts)[cnt-2].tsP=&stns[i];

(*tkts)[cnt-2].value=v;

(*tkts)[cnt-2].number=n;

printf("----%s和%s的之间往返票各生成%d张,票价为%d(随机) ",stns[i].sName,stns[j].sName,n,v);

cnt+=2;

}

return cnt-2;

}

//答题不易,如采纳的,请不要无故删除问题。

Ⅲ c语言对数组进行插入,排序,删除,替换操作.(求源代码,谢谢)

删除函数,删除ptr中的ptr[in]元素,n是数组原来的长度。
void rmv(int *ptr,int in,const unsigned int n)
{
unsigned int i;
for (i=in; i<n-1; i++) {
*(ptr+i)=*(ptr+i+1);
}
realloc(ptr,sizeof(int)*(n-1));
}

插入函数,在整形数组ptr中的ptr[in]之前插入x,n是原数组的长度

#include <stdio.h>
#include <stdlib.h>

void rmv(int *ptr,int in,const unsigned int n)
{
unsigned int i;
for (i=in; i<n-1; i++) {
*(ptr+i)=*(ptr+i+1);
}
realloc(ptr,sizeof(int)*(n-1));
}
void rin(int *ptr,int in,int x,const unsigned int n)
{
unsigned int i;
realloc(ptr,sizeof(int)*(n+1));
for (i=n; i>in; i--) {
*(ptr+i)=*(ptr+i-1);
}
ptr[in]=x;
}
int main(int argc, char* argv[])
{
int *p,i;
p=calloc(6,sizeof(int));
for (i = 0; i<6; i++) {
p[i]=i;
}
*(p+2)=124;
for (i=0; i<6; i++) {
printf("%d ",p[i]);
}
putchar('\n');
rmv(p,2,6);

for (i=0; i<6; i++) {
printf("%d ",p[i]);
}
rin(p,2,258,5);
putchar('\n');
for (i=0; i<6; i++) {
printf("%d ",p[i]);
}
system("pause");
free(p);
return 0;
}

Ⅳ 怎么对C语言中的文件进行内容添加,删除,查找的操作

c语言文件操作

13.3 文件的打开与关闭
文件在进行读写操作之前要先打开,使用完毕要关闭。所谓打开文件,实际上是建立文件的各种有关信息,并使文件指针指向该文件,以便进行其它操作。关闭文件则断开指针与文件之间的联系,也就禁止再对该文件进行操作。

在C语言中,文件操作都是由库函数来完成的。在本章内将介绍主要的文件操作函数。

13.3.1 文件的打开(fopen函数)
fopen函数用来打开一个文件,其调用的一般形式为:

文件指针名=fopen(文件名,使用文件方式);

其中,

“文件指针名”必须是被说明为FILE 类型的指针变量;

“文件名”是被打开文件的文件名;

“使用文件方式”是指文件的类型和操作要求。

“文件名”是字符串常量或字符串数组。

例如:

FILE *fp;

fp=("file a","r");

其意义是在当前目录下打开文件file a,只允许进行“读”操作,并使fp指向该文件。

又如:

FILE *fphzk

fphzk=("c:\\hzk16","rb")

其意义是打开C驱动器磁盘的根目录下的文件hzk16,这是一个二进制文件,只允许按二进制方式进行读操作。两个反斜线“\\ ”中的第一个表示转义字符,第二个表示根目录。

使用文件的方式共有12种,下面给出了它们的符号和意义。

文件使用方式
意义

“rt”
只读打开一个文本文件,只允许读数据

“wt”
只写打开或建立一个文本文件,只允许写数据

“at”
追加打开一个文本文件,并在文件末尾写数据

“rb”
只读打开一个二进制文件,只允许读数据

“wb”
只写打开或建立一个二进制文件,只允许写数据

“ab”
追加打开一个二进制文件,并在文件末尾写数据

“rt+”
读写打开一个文本文件,允许读和写

“wt+”
读写打开或建立一个文本文件,允许读写

“at+”
读写打开一个文本文件,允许读,或在文件末追加数据

“rb+”
读写打开一个二进制文件,允许读和写

“wb+”
读写打开或建立一个二进制文件,允许读和写

“ab+”
读写打开一个二进制文件,允许读,或在文件末追加数据

对于文件使用方式有以下几点说明:

1) 文件使用方式由r,w,a,t,b,+六个字符拼成,各字符的含义是:

r(read): 读

w(write): 写

a(append): 追加

t(text): 文本文件,可省略不写

b(banary): 二进制文件

+: 读和写

2) 凡用“r”打开一个文件时,该文件必须已经存在,且只能从该文件读出。

3) 用“w”打开的文件只能向该文件写入。若打开的文件不存在,则以指定的文件名建立该文件,若打开的文件已经存在,则将该文件删去,重建一个新文件。

4) 若要向一个已存在的文件追加新的信息,只能用“a”方式打开文件。但此时该文件必须是存在的,否则将会出错。

5) 在打开一个文件时,如果出错,fopen将返回一个空指针值NULL。在程序中可以用这一信息来判别是否完成打开文件的工作,并作相应的处理。因此常用以下程序段打开文件:

6) if((fp=fopen("c:\\hzk16","rb")==NULL)

{

printf("\nerror on open c:\\hzk16 file!");

getch();

exit(1);

}

这段程序的意义是,如果返回的指针为空,表示不能打开C盘根目录下的hzk16文件,则给出提示信息“error on open c:\ hzk16 file!”,下一行getch()的功能是从键盘输入一个字符,但不在屏幕上显示。在这里,该行的作用是等待,只有当用户从键盘敲任一键时,程序才继续执行,因此用户可利用这个等待时间阅读出错提示。敲键后执行exit(1)退出程序。

7) 把一个文本文件读入内存时,要将ASCII码转换成二进制码,而把文件以文本方式写入磁盘时,也要把二进制码转换成ASCII码,因此文本文件的读写要花费较多的转换时间。对二进制文件的读写不存在这种转换。

8) 标准输入文件(键盘),标准输出文件(显示器),标准出错输出(出错信息)是由系统打开的,可直接使用。

13.3.2 文件关闭函数(fclose函数)
文件一旦使用完毕,应用关闭文件函数把文件关闭,以避免文件的数据丢失等错误。

fclose函数调用的一般形式是:

fclose(文件指针);

例如:

fclose(fp);

正常完成关闭文件操作时,fclose函数返回值为0。如返回非零值则表示有错误发生。

13.4 文件的读写
对文件的读和写是最常用的文件操作。在C语言中提供了多种文件读写的函数:

·字符读写函数 :fgetc和fputc

·字符串读写函数:fgets和fputs

·数据块读写函数:freed和fwrite

·格式化读写函数:fscanf和fprinf

下面分别予以介绍。使用以上函数都要求包含头文件stdio.h。

13.4.1 字符读写函数fgetc和fputc
字符读写函数是以字符(字节)为单位的读写函数。每次可从文件读出或向文件写入一个字符。

1. 读字符函数fgetc

fgetc函数的功能是从指定的文件中读一个字符,函数调用的形式为:

字符变量=fgetc(文件指针);

例如:

ch=fgetc(fp);

其意义是从打开的文件fp中读取一个字符并送入ch中。

对于fgetc函数的使用有以下几点说明:

1) 在fgetc函数调用中,读取的文件必须是以读或读写方式打开的。

2) 读取字符的结果也可以不向字符变量赋值,

例如:

fgetc(fp);

但是读出的字符不能保存。

3) 在文件内部有一个位置指针。用来指向文件的当前读写字节。在文件打开时,该指针总是指向文件的第一个字节。使用fgetc 函数后,该位置指针将向后移动一个字节。 因此可连续多次使用fgetc函数,读取多个字符。应注意文件指针和文件内部的位置指针不是一回事。文件指针是指向整个文件的,须在程序中定义说明,只要不重新赋值,文件指针的值是不变的。文件内部的位置指针用以指示文件内部的当前读写位置,每读写一次,该指针均向后移动,它不需在程序中定义说明,而是由系统自动设置的。

【例13.1】读入文件c1.doc,在屏幕上输出。

#include<stdio.h>

main()

{

FILE *fp;

char ch;

if((fp=fopen("d:\\jrzh\\example\\c1.txt","rt"))==NULL)

{

printf("\nCannot open file strike any key exit!");

getch();

exit(1);

}

ch=fgetc(fp);

while(ch!=EOF)

{

putchar(ch);

ch=fgetc(fp);

}

fclose(fp);

}
本例程序的功能是从文件中逐个读取字符,在屏幕上显示。程序定义了文件指针fp,以读文本文件方式打开文件“d:\\jrzh\\example\\ex1_1.c”,并使fp指向该文件。如打开文件出错,给出提示并退出程序。程序第12行先读出一个字符,然后进入循环,只要读出的字符不是文件结束标志(每个文件末有一结束标志EOF)就把该字符显示在屏幕上,再读入下一字符。每读一次,文件内部的位置指针向后移动一个字符,文件结束时,该指针指向EOF。执行本程序将显示整个文件。

2. 写字符函数fputc

fputc函数的功能是把一个字符写入指定的文件中,函数调用的形式为:

fputc(字符量,文件指针);

其中,待写入的字符量可以是字符常量或变量,例如:

fputc('a',fp);

其意义是把字符a写入fp所指向的文件中。

对于fputc函数的使用也要说明几点:

1) 被写入的文件可以用写、读写、追加方式打开,用写或读写方式打开一个已存在的文件时将清除原有的文件内容,写入字符从文件首开始。如需保留原有文件内容,希望写入的字符以文件末开始存放,必须以追加方式打开文件。被写入的文件若不存在,则创建该文件。

2) 每写入一个字符,文件内部位置指针向后移动一个字节。

3) fputc函数有一个返回值,如写入成功则返回写入的字符,否则返回一个EOF。可用此来判断写入是否成功。

【例13.2】从键盘输入一行字符,写入一个文件,再把该文件内容读出显示在屏幕上。

#include<stdio.h>

main()

{

FILE *fp;

char ch;

if((fp=fopen("d:\\jrzh\\example\\string","wt+"))==NULL)

{

printf("Cannot open file strike any key exit!");

getch();

exit(1);

}

printf("input a string:\n");

ch=getchar();

while (ch!='\n')

{

fputc(ch,fp);

ch=getchar();

}

rewind(fp);

ch=fgetc(fp);

while(ch!=EOF)

{

putchar(ch);

ch=fgetc(fp);

}

printf("\n");

fclose(fp);

}

程序中第6行以读写文本文件方式打开文件string。程序第13行从键盘读入一个字符后进入循环,当读入字符不为回车符时,则把该字符写入文件之中,然后继续从键盘读入下一字符。每输入一个字符,文件内部位置指针向后移动一个字节。写入完毕,该指针已指向文件末。如要把文件从头读出,须把指针移向文件头,程序第19行rewind函数用于把fp所指文件的内部位置指针移到文件头。第20至25行用于读出文件中的一行内容。

【例13.3】把命令行参数中的前一个文件名标识的文件,复制到后一个文件名标识的文件中,如命令行中只有一个文件名则把该文件写到标准输出文件(显示器)中。

#include<stdio.h>

main(int argc,char *argv[])

{

FILE *fp1,*fp2;

char ch;

if(argc==1)

{

printf("have not enter file name strike any key exit");

getch();

exit(0);

}

if((fp1=fopen(argv[1],"rt"))==NULL)

{

printf("Cannot open %s\n",argv[1]);

getch();

exit(1);

}

if(argc==2) fp2=stdout;

else if((fp2=fopen(argv[2],"wt+"))==NULL)

{

printf("Cannot open %s\n",argv[1]);

getch();

exit(1);

}

while((ch=fgetc(fp1))!=EOF)

fputc(ch,fp2);

fclose(fp1);

fclose(fp2);

}

本程序为带参的main函数。程序中定义了两个文件指针fp1和fp2,分别指向命令行参数中给出的文件。如命令行参数中没有给出文件名,则给出提示信息。程序第18行表示如果只给出一个文件名,则使fp2指向标准输出文件(即显示器)。程序第25行至28行用循环语句逐个读出文件1中的字符再送到文件2中。再次运行时,给出了一个文件名,故输出给标准输出文件stdout,即在显示器上显示文件内容。第三次运行,给出了二个文件名,因此把string中的内容读出,写入到OK之中。可用DOS命令type显示OK的内容。

13.4.2 字符串读写函数fgets和fputs
1. 读字符串函数fgets

函数的功能是从指定的文件中读一个字符串到字符数组中,函数调用的形式为:

fgets(字符数组名,n,文件指针);

其中的n是一个正整数。表示从文件中读出的字符串不超过 n-1个字符。在读入的最后一个字符后加上串结束标志'\0'。

例如:

fgets(str,n,fp);

的意义是从fp所指的文件中读出n-1个字符送入字符数组str中。

【例13.4】从string文件中读入一个含10个字符的字符串。

#include<stdio.h>

main()

{

FILE *fp;

char str[11];

if((fp=fopen("d:\\jrzh\\example\\string","rt"))==NULL)

{

printf("\nCannot open file strike any key exit!");

getch();

exit(1);

}

fgets(str,11,fp);

printf("\n%s\n",str);

fclose(fp);

}

本例定义了一个字符数组str共11个字节,在以读文本文件方式打开文件string后,从中读出10个字符送入str数组,在数组最后一个单元内将加上'\0',然后在屏幕上显示输出str数组。输出的十个字符正是例13.1程序的前十个字符。

对fgets函数有两点说明:

1) 在读出n-1个字符之前,如遇到了换行符或EOF,则读出结束。

2) fgets函数也有返回值,其返回值是字符数组的首地址。

2. 写字符串函数fputs

fputs函数的功能是向指定的文件写入一个字符串,其调用形式为:

fputs(字符串,文件指针);

其中字符串可以是字符串常量,也可以是字符数组名,或指针变量,例如:

fputs(“abcd“,fp);

其意义是把字符串“abcd”写入fp所指的文件之中。

【例13.5】在例13.2中建立的文件string中追加一个字符串。

#include<stdio.h>

main()

{

FILE *fp;

char ch,st[20];

if((fp=fopen("string","at+"))==NULL)

{

printf("Cannot open file strike any key exit!");

getch();

exit(1);

}

printf("input a string:\n");

scanf("%s",st);

fputs(st,fp);

rewind(fp);

ch=fgetc(fp);

while(ch!=EOF)

{

putchar(ch);

ch=fgetc(fp);

}

printf("\n");

fclose(fp);

}

本例要求在string文件末加写字符串,因此,在程序第6行以追加读写文本文件的方式打开文件string。然后输入字符串,并用fputs函数把该串写入文件string。在程序15行用rewind函数把文件内部位置指针移到文件首。再进入循环逐个显示当前文件中的全部内容。

13.4.3 数据块读写函数fread和fwtrite
C语言还提供了用于整块数据的读写函数。可用来读写一组数据,如一个数组元素,一个结构变量的值等。

读数据块函数调用的一般形式为:

fread(buffer,size,count,fp);

写数据块函数调用的一般形式为:

fwrite(buffer,size,count,fp);

其中:

buffer 是一个指针,在fread函数中,它表示存放输入数据的首地址。在fwrite函数中,它表示存放输出数据的首地址。

size 表示数据块的字节数。

count 表示要读写的数据块块数。

fp 表示文件指针。

例如:

fread(fa,4,5,fp);

其意义是从fp所指的文件中,每次读4个字节(一个实数)送入实数组fa中,连续读5次,即读5个实数到fa中。

【例13.6】从键盘输入两个学生数据,写入一个文件中,再读出这两个学生的数据显示在屏幕上。

#include<stdio.h>

struct stu

{

char name[10];

int num;

int age;

char addr[15];

}boya[2],boyb[2],*pp,*qq;

main()

{

FILE *fp;

char ch;

int i;

pp=boya;

qq=boyb;

if((fp=fopen("d:\\jrzh\\example\\stu_list","wb+"))==NULL)

{

printf("Cannot open file strike any key exit!");

getch();

exit(1);

}

printf("\ninput data\n");

for(i=0;i<2;i++,pp++)

scanf("%s%d%d%s",pp->name,&pp->num,&pp->age,pp->addr);

pp=boya;

fwrite(pp,sizeof(struct stu),2,fp);

rewind(fp);

fread(qq,sizeof(struct stu),2,fp);

printf("\n\nname\tnumber age addr\n");

for(i=0;i<2;i++,qq++)

printf("%s\t%5d%7d %s\n",qq->name,qq->num,qq->age,qq->addr);

fclose(fp);

}

本例程序定义了一个结构stu,说明了两个结构数组boya和boyb以及两个结构指针变量pp和qq。pp指向boya,qq指向boyb。程序第16行以读写方式打开二进制文件“stu_list”,输入二个学生数据之后,写入该文件中,然后把文件内部位置指针移到文件首,读出两块学生数据后,在屏幕上显示。

------

回复此文章 |
回复主题:Re:c语言文件操作 | 作者: haohao | 军衔:六级军士 | 发表时间:2004-07-28 11:08:47
下午应该把这个搞定了.
------

回复此文章 |
回复主题:Re:Re:c语言文件操作 | 作者: haohao | 军衔:六级军士 | 发表时间:2004-07-28 11:10:23
13.7 C库文件
C系统提供了丰富的系统文件,称为库文件,C的库文件分为两类,一类是扩展名为".h"的文件,称为头文件,在前面的包含命令中我们已多次使用过。在".h"文件中包含了常量定义、类型定义、宏定义、函数原型以及各种编译选择设置等信息。另一类是函数库,包括了各种函数的目标代码,供用户在程序中调用。 通常在程序中调用一个库函数时,要在调用之前包含该函数原型所在的".h" 文件。

下面给出Turbo C的全部".h"文件。

Turbo C头文件

n ALLOC.H 说明内存管理函数(分配、释放等)。

n ASSERT.H 定义 assert调试宏。

n BIOS.H 说明调用IBM—PC ROM BIOS子程序的各个函数。

n CONIO.H 说明调用DOS控制台I/O子程序的各个函数。

n CTYPE.H 包含有关字符分类及转换的名类信息(如 isalpha和toascii等)。

n DIR.H 包含有关目录和路径的结构、宏定义和函数。

n DOS.H 定义和说明MSDOS和8086调用的一些常量和函数。

n ERRON.H 定义错误代码的助记符。

n FCNTL.H 定义在与open库子程序连接时的符号常量。

n FLOAT.H 包含有关浮点运算的一些参数和函数。

n GRAPHICS.H 说明有关图形功能的各个函数,图形错误代码的常量定义,正对不同驱动程序的各种颜色值,及函数用到的一些特殊结构。

n IO.H 包含低级I/O子程序的结构和说明。

n LIMIT.H 包含各环境参数、编译时间限制、数的范围等信息。

n MATH.H 说明数学运算函数,还定了 HUGE VAL 宏, 说明了matherr和matherr子程序用到的特殊结构。

n MEM.H 说明一些内存操作函数(其中大多数也在STRING.H中说明)。

n PROCESS.H 说明进程管理的各个函数,spawn…和EXEC …函数的结构说明。

n SETJMP.H 定义longjmp和setjmp函数用到的jmp buf类型,说明这两个函数。

n SHARE.H 定义文件共享函数的参数。

n SIGNAL.H 定义SIG[ZZ(Z] [ZZ)]IGN和SIG[ZZ(Z] [ZZ)]DFL常量,说明rajse和signal两个函数。

n STDARG.H 定义读函数参数表的宏。(如vprintf,vscarf函数)。

n STDDEF.H 定义一些公共数据类型和宏。

n STDIO.H 定义Kernighan和Ritchie在Unix System V 中定义的标准和扩展的类型和宏。还定义标准I/O 预定义流:stdin,stdout和stderr,说明 I/O流子程序。

n STDLIB.H 说明一些常用的子程序:转换子程序、搜索/ 排序子程序等。

n STRING.H 说明一些串操作和内存操作函数。

n SYS\STAT.H 定义在打开和创建文件时用到的一些符号常量。

n SYS\TYPES.H 说明ftime函数和timeb结构。

n SYS\TIME.H 定义时间的类型time[ZZ(Z] [ZZ)]t。

n TIME.H 定义时间转换子程序asctime、localtime和gmtime的结构,ctime、 difftime、 gmtime、 localtime和stime用到的类型,并提供这些函数的原型。

n VALUE.H 定义一些重要常量,包括依赖于机器硬件的和为与Unix System V相兼容而说明的一些常量,包括浮点和双精度值的范围。

13.8 本章小结
1. C系统把文件当作一个“流”,按字节进行处理。

2. C文件按编码方式分为二进制文件和ASCII文件。

3. C语言中,用文件指针标识文件,当一个文件被打开时,可取得该文件指针。

4. 文件在读写之前必须打开,读写结束必须关闭。

5. 文件可按只读、只写、读写、追加四种操作方式打开,同时还必须指定文件的类型是二进制文件还是文本文件。

6. 文件可按字节,字符串,数据块为单位读写,文件也可按指定的格式进行读写。

7. 文件内部的位置指针可指示当前的读写位置,移动该指针可以对文件实现随机读写。

Ⅳ C语言数组如何将12345 添加 和删除具体怎么写 求大神们指导~~~~

我的思路是用用户输入的字符来查找需要替换的字符,用新值来替换旧值,输出数组中的元素,这样就达到了删除和添加。

Ⅵ C语言-删除字符串中指定的字符

一、问题描述:从键盘输入一个字符串给str和一个字符给c,删除str中的所有字符c并输出删除后的字符串str。

1、输入:第一行是一个字符串; 第二行是一个字符。

2、输出:删除指定字符后的字符串。

二、设计思路:

1、 同插入问题,定义两个字符数组a,b。以及标志删除位置的int型pos。

2、用gets函数输入数组a的值,并利用for循环将数组a 到 数组b。

3、利用for循环,令pos位的数组b元素赋值到a。

三、实现代码如下:

具体执行结果同上。

Ⅶ 使用C语言实现双向链表的建立、删除和插入

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
struct list{
int data;
struct list *next;
struct list *pre;
};
typedef struct list node;
typedef node *link;
link front=NULL,rear,ptr,head=NULL;

link push(int item){
link newnode=(link)malloc(sizeof(node));
newnode->data=item;
if(head==NULL)
{
head=newnode;
head->next=NULL;
head->pre=NULL;
rear=head;
}
else
{
rear->next=newnode;
newnode->pre=rear;
newnode->next=NULL;
rear=newnode;
}
return head;
}

void makenull(){
front=NULL;
rear=NULL;
}

empty(){
if(front==NULL)
return 1;
else
return 0;
}

int tops(){
if(empty())
return NULL;
else
return rear->data;
}

void pop(){
if(empty())
printf("stack is empty!\n");
else
rear=rear->pre;
}

void display(link l){
link p;
p=l;
while(p!=NULL){
printf("%d->",p->data);
p=p->next;
}
}

void main(){
int n,i;
printf("input your first data!\n");
scanf("%d",&n);
front=push(n);
/*another data*/
for(i=0;i<3;i++)
{
printf("input:\n");
scanf("%d",&n);
push(n);
}
ptr=front;
display(ptr);
printf("\n Please enter any key to pop");
pop();
ptr=front;
display(ptr);

}

Ⅷ C语言删除字符串中指定字符

一、问题描述:从键盘输入一个字符串给str和一个字符给c,删除str中的所有字符c并输出删除后的字符串str。

1、输入:第一行是一个字符串; 第二行是一个字符。

2、输出:删除指定字符后的字符串。

二、设计思路:

1、 同插入问题,定义两个字符数组a,b。以及标志删除位置的int型pos。

2、用gets函数输入数组a的值,并利用for循环将数组a 到 数组b。

3、利用for循环,令pos位的数组b元素赋值到a。

三、实现代码如下:

具体执行结果同上。

Ⅸ 在dos下查询文件

分类: 电脑/网络 >> 操作系统/系统故障
问题描述:

用什么命令呀?就象windows搜索这个功能差不多 的命令,有吗?

解析:

在运行中输入cmd,进入dos,输入cd\进入C盘的目录,然后输dir就是c盘文件的列表. 输入cd windows进入windows文件夹,输入tree就是目录树的意思. 输入D;进入D盘

搜索的话就用find命令,和windows搜索这个功能差不多.

Dir c:*.exe/b/s就可以把C盘的所有.exe文件搜索出来

语法:find 起始目录 寻找条件 操作

以下是摘抄的内容.

find命令

功能:在目录结构中搜索文件,并执行指定的操作。此命令提供了相当多的查找条件,功能很强大。

语法:find 起始目录 寻找条件 操作

说明:find命令从指定的起始目录开始,递归地搜索其各个子目录,查找满足寻找条件的文件并对之采取相关的操作。

该命令提供的寻找条件可以是一个用逻辑运算符not、and、or组成的复合条件。逻辑运算符and、or、not的含义为:

(1)and:逻辑与,在命令中用“-a”表示,是系统缺省的选项,表示只有当所给的条件都满足时,寻找条件才算满足。例如:

$ find –name ’tmp’ –xtype c -user ’inin’

该命令寻找三个给定条件都满足的所有文件。

(2)or:逻辑或,在命令中用“-o”表示。该运算符表示只要所给的条件中有一个满足时,寻找条件就算满足。例如:

$ find –name ’tmp’ –o –name ’mina*’

该命令查询文件名为’tmp’或是匹配’mina*’的所有文件。

(3)not:逻辑非,在命令中用“!”表示。该运算符表示查找不满足所给条件的文件。例如:

$ find ! –name ’tmp’

该命令查询文件名不是’tmp’的所有文件。

需要说明的是:当使用很多的逻辑选项时,可以用括号把这些选项括起来。为了避免Shell本身对括号引起误解,在话号前需要加转义字符“”来去除括号的意义。

例:$ find (–name ’tmp’ –xtype c -user ’inin’ )

寻找条件有以下选项:

首先,下列各个选项中的n值可以有三种输入方式,假设n为20,则:

+20 表示20以后(21,22,23等)

-20 表示20以前(19,18,17等)

20 表示正好是20

1. 以名称和文件属性查找。

- name ’字串’ 查找文件名匹配所给字串的所有文件,字串内可用通配符*、?、〔 〕。

- lname ’字串’ 查找文件名匹配所给字串的所有符号链接文件,字串内可用通配符*、?、〔 〕。

-gid n 查找属于ID号为n的用户组的所有文件。

-uid n 查找属于ID号为n的用户的所有文件。

-group ’字串’ 查找属于用户组名为所给字串的所有的文件。

-user ’字串’ 查找属于用户名为所给字串的所有的文件。

-nogroup 查找无有效所属组的文件,即该文件所属的组在/ e t c / g r o u p s中不存在。

-nouser 查找无有效属主的文件,即该文件的属主在/ e t c / p a s s w d中不存在。

-newer file1 ! file2 查找更改时间比文件f i l e 1新但比文件f i l e 2旧的文件。

-empty 查找大小为0的目录或文件。

-path ’字串’ 查找路径名匹配所给字串的所有文件,字串内可用通配符*、?、〔 〕。

-perm 权限 查找具有指定权限的文件和目录,权限的表示可以如711,644。

-size n〔bckw〕 查找指定文件大小的文件,n后面的字符表示单位,缺省为b,代表512字节的块。

-type x 查找类型为x的文件,x为下列字符之一:

b 块设备文件

c 字符设备文件

d 目录文件

p 命名管道(FIFO)

f 普通文件

l 符号链接文件(symbolic links)

s socket文件

-xtype x 与-type基本相同,但只查找符号链接文件。

2. 以时间为条件查找

- amin n 查找n分钟以前被访问过的所有文件。

- atime n 查找n天以前被访问过的所有文件。

- cmin n 查找n分钟以前文件状态被修改过的所有文件。

- ctime n 查找n天以前文件状态被修改过的所有文件。

- mmin n 查找n分钟以前文件内容被修改过的所有文件。

- mtime n 查找n天以前文件内容被修改过的所有文件。

3. 可执行的操作

- exec 命令名称 {} \; 对符合条件的文件执行所给的unix 命令,而不询问用户是否需要执行该命令。{}表示命令的参数即为所找到的文件,命令的末尾必须以“ \;”结束,"{}"和"\;"之间必须有一个空格。

- ok 命令名称 {} \; 对符合条件的文件执行所给的Linux 命令,与exec不同的是,它会询问用户是否需要执行该命令。

- ls 详细列出所找到的所有文件。

- fprintf 文件名 将找到的文件名写入指定文件。

- print 在标准输出设备上显示查找出的文件名。

- printf 格式 格式的写法请参考有关C语言的书。

使用name选项

文件名选项是f i n d命令最常用的选项,要么单独使用该选项,要么和其他选项一起使用。

可以使用某种文件名模式来匹配文件,记住要用引号将文件名模式引起来。

不管当前路径是什么,如果想要在自己的根目录$ H O M E中查找文件名符合* . t x t的文件,

使用~作为' p a t h n a m e参数,波浪号~代表了你的$ H O M E目录。

$ find ~ -name "*.txt" -print

想要在当前目录及子目录中查找所有的' * . t x t'文件,可以用:

$ find . -name "*.txt" -print

想要的当前目录及子目录中查找文件名以一个大写字母开头的文件,可以用:

$ find . -name "[A-Z]*" -print

想要在/ e t c目录中查找文件名以h o s t开头的文件,可以用:

$ find /etc -name "host*" -print

想要查找$ H O M E目录中的文件,可以用:

$ find ~ -name "*" -print 或find . -print

要想让系统高负荷运行,就从根目录开始查找所有的文件。如果希望在系统管理员那里

保留一个好印象的话,最好在这么做之前考虑清楚!

$ find / -name "*" -print

如果想在当前目录查找文件名以两个小写字母开头,跟着是两个数字,最后是* . t x t的文

件,下面的命令就能够返回名为a x 3 7 . t x t的文件:

$ find . -name "[a-z][a-z][0--9][0--9].txt" -print

使用perm选项

如果希望按照文件权限模式来查找文件的话,可以采用- p e r m选项。你可能需要找到所有

用户都具有执行权限的文件,或是希望查看某个用户目录下的文件权限类型。在使用这一选

项的时候,最好使用八进制的权限表示法。

为了在当前目录下查找文件权限位为7 5 5的文件,即文件属主可以读、写、执行,其他用

户可以读、执行的文件,可以用:

$ find . -perm 755 -print

如果希望在当前目录下查找所有用户都可读、写、执行的文件(要小心这种情况),我们

可以使用f i n d命令的- p e r m选项。在八进制数字前面要加一个横杠-。在下面的命令中- p e r m代

表按照文件权限查找,而' 0 0 7'和你在c h m o d命令的绝对模式中所采用的表示法完全相同。

$ find . -perm -007 -print

忽略某个目录

如果在查找文件时希望忽略某个目录,因为你知道那个目录中没有你所要查找的文件,

那么可以使用- p r u n e选项来指出需要忽略的目录。在使用- p r u n e选项时要当心,因为如果你同

时使用了- d e p t h选项,那么- p r u n e选项就会被f i n d命令忽略。

如果希望在/ a p p s目录下查找文件,但不希望在/ a p p s / b i n目录下查找,可以用:

$ find /apps -name "/apps/bin" -prune -o -print

使用user和nouser选项

如果希望按照文件属主查找文件,可以给出相应的用户名。例如,在$ H O M E目录中查找

文件属主为d a v e的文件,可以用:

$ find ~ -user dave -print

在/ e t c目录下查找文件属主为u u c p的文件:

$ find /etc -user uucp -print

为了查找属主帐户已经被删除的文件,可以使用- n o u s e r选项。这样就能够找到那些属主

在/ e t c / p a s s w d文件中没有有效帐户的文件。在使用- n o u s e r选项时,不必给出用户名; f i n d命令

能够为你完成相应的工作。例如,希望在/ h o m e目录下查找所有的这类文件,可以用:

$ find /home -nouser -print

使用group和nogroup选项

就像u s e r和n o u s e r选项一样,针对文件所属于的用户组, f i n d命令也具有同样的选项,为

了在/ a p p s目录下查找属于a c c t s用户组的文件,可以用:

$ find /apps -group accts -print

要查找没有有效所属用户组的所有文件,可以使用n o g r o u p选项。下面的f i n d命令从文件

系统的根目录处查找这样的文件

$ fine/-nogroup-print

按照更改时间查找文件

如果希望按照更改时间来查找文件,可以使用m t i m e选项。如果系统突然没有可用空间了,

很有可能某一个文件的长度在此期间增长迅速,这时就可以用m t i m e选项来查找这样的文件。

用减号-来限定更改时间在距今n日以内的文件,而用加号+来限定更改时间在距今n日以前的

文件。

希望在系统根目录下查找更改时间在5日以内的文件,可以用:

$ find / -mtime -5 -print

为了在/ v a r / a d m目录下查找更改时间在3日以前的文件,可以用:

$ find /var/adm -mtime +3 -print

查找比某个文件新或旧的文件

如果希望查找更改时间比某个文件新但比另一个文件旧的所有文件,可以使用- n e w e r选

项。它的一般形式为:

newest_file_name ! oldest_file_name

其中,!是逻辑非符号。

这里有两个文件,它们的更改时间大约相差两天。

下面给出的f i n d命令能够查找更改时间比文件a g e . a w k新但比文件b e l t s . a w k旧的文件:

如果想使用f i n d命令的这一选项来查找更改时间在两个小时以内的文件,除非有一个现成

的文件其更改时间恰好在两个小时以前,否则就没有可用来比较更改时间的文件。为了解决

这一问题,可以首先创建一个文件并将其日期和时间戳设置为所需要的时间。这可以用t o u c h

命令来实现。

假设现在的时间是2 3 : 4 0,希望查找更改时间在两个小时以内的文件,可以首先创建这样

一个文件:

一个符合要求的文件已经被创建;这里我们假设今天是五月四日,而该文件的更改时间

是2 1 : 4 0,比现在刚好早两个小时。

现在我们就可以使用f i n d命令的- n e w e r选项在当前目录下查找所有更改时间在两个小时以

内的文件:

$ find . -newer dstamp -print

使用type选项

U N I X或L I N U X系统中有若干种不同的文件类型,这部分内容我们在前面的章节已经做了

介绍,这里就不再赘述。如果要在/ e t c目录下查找所有的目录,可以用:

$ find /etc -type d -print

为了在当前目录下查找除目录以外的所有类型的文件,可以用:

$ find . ! -type d -print

为了在/ e t c目录下查找所有的符号链接文件,可以用:

$ find /etc -type l -print

使用size选项

可以按照文件长度来查找文件,这里所指的文件长度既可以用块( b l o c k)来计量,也可

以用字节来计量。以字节计量文件长度的表达形式为N c;以块计量文件长度只用数字表示即

可。

就我个人而言,我总是使用以字节计的方式,在按照文件长度查找文件时,大多数人都

喜欢使用这种以字节表示的文件长度,而不用块的数目来表示,除非是在查看文件系统的大

小,因为这时使用块来计量更容易转换。

为了在当前目录下查找文件长度大于1 M字节的文件,可以用:

$ find . -size +1000000c -print

为了在/ h o m e / a p a c h e目录下查找文件长度恰好为1 0 0字节的文件,可以用:

$ find /home/apache -size 100c -print

为了在当前目录下查找长度超过1 0块的文件(一块等于5 1 2字节),可以用:

$ find . -size +10 -print

使用depth选项

在使用f i n d命令时,可能希望先匹配所有的文件,再在子目录中查找。使用d e p t h选项就

可以使f i n d命令这样做。这样做的一个原因就是,当在使用f i n d命令向磁带上备份文件系统时,

希望首先备份所有的文件,其次再备份子目录中的文件。

在下面的例子中, f i n d命令从文件系统的根目录开始,查找一个名为C O N . F I L E的文件。

它将首先匹配所有的文件然后再进入子目录中查找。

$ find / -name "CON.FILE" -depth -print

使用mount选项

在当前的文件系统中查找文件(不进入其他文件系统),可以使用f i n d命令的m o u n t选项。

在下面的例子中,我们从当前目录开始查找位于本文件系统中文件名以X C结尾的文件:

$ find . -name "*.XC" -mount -print

使用cpio选项

c p i o命令可以用来向磁带设备备份文件或从中恢复文件。可以使用f i n d命令在整个文件系

统中(更多的情况下是在部分文件系统中)查找文件,然后用c p i o命令将其备份到磁带上。

如果希望使用c p i o命令备份/ e t c、/ h o m e和/ a p p s目录中的文件,可以使用下面所给出的命令,不过要记住你是在文件系统的根目录下:

(在上面的例子中,第一行末尾的\告诉s h e l l命令还未结束,忽略\后面的回车。)

在上面的例子中,应当注意到路径中缺少/。这叫作相对路径。之所以使用相对路径,是

因为在从磁带中恢复这些文件的时候,可以选择恢复文件的路径。例如,可以将这些文件先

恢复到另外一个目录中,对它们进行某些操作后,再恢复到原始目录中。如果在备份时使用

了绝对路径,例如/ e t c,那么在恢复时,就只能恢复到/ e t c目录中去,别无其他选择。在上面

的例子中,我告诉f i n d命令首先进入/ e t c目录,然后是/ h o m e和/ a p p s目录,先匹配这些目录下的文件,然后再匹配其子目录中的文件,所有这些结果将通过管道传递给c p i o命令进行备份。

顺便说一下,在上面的例子中c p i o命令使用了C 6 5 5 3 6选项,我本可以使用B选项,不过这

样每块的大小只有5 1 2 字节,而使用了C 6 5 5 3 6 选项后,块的大小变成了6 4 K 字节

(6 5 5 3 6 / 1 0 2 4)。

使用exec或ok来执行shell命令

当匹配到一些文件以后,可能希望对其进行某些操作,这时就可以使用- e x e c选项。一旦

f i n d命令匹配到了相应的文件,就可以用- e x e c选项中的命令对其进行操作(在有些操作系统

中只允许- e x e c选项执行诸如l s或ls -l这样的命令)。大多数用户使用这一选项是为了查找旧文

件并删除它们。这里我强烈地建议你在真正执行r m命令删除文件之前,最好先用l s命令看一

下,确认它们是所要删除的文件。

e x e c选项后面跟随着所要执行的命令,然后是一对儿{ },一个空格和一个\,最后是一个

分号。

为了使用e x e c选项,必须要同时使用p r i n t选项。如果验证一下f i n d命令,会发现该命令只

输出从当前路径起的相对路径及文件名。

为了用ls -l命令列出所匹配到的文件,可以把ls -l命令放在f i n d命令的- e x e c选项中,例如:

上面的例子中,f i n d命令匹配到了当前目录下的所有普通文件,并在- e x e c选项中使用ls -l

命令将它们列出。

为了在/ l o g s目录中查找更改时间在5日以前的文件并删除它们,可以用:

$ find logs -type f -mtime +5 -exec rm {} \;

记住,在s h e l l中用任何方式删除文件之前,应当先查看相应的文件,一定要小心!

当使用诸如m v或r m命令时,可以使用- e x e c选项的安全模式。它将在对每个匹配到的文件

进行操作之前提示你。在下面的例子中, f i n d命令在当前目录中查找所有文件名以. L O G结尾、

更改时间在5日以上的文件,并删除它们,只不过在删除之前先给出提示。

按y键删除文件,按n键不删除。

任何形式的命令都可以在- e x e c选项中使用。在下面的例子中我们使用g r e p命令。f i n d命令

首先匹配所有文件名为" p a s s w d *"的文件,例如p a s s w d、p a s s w d . o l d、p a s s w d . b a k,然后执

行g r e p命令看看在这些文件中是否存在一个r o u n d e r用户。

find命令的例子

我们已经介绍了f i n d命令的基本选项,下面给出f i n d命令的一些其他的例子。

为了匹配$ H O M E目录下的所有文件,下面两种方法都可以使用:

$ find $HOME -print

$ find ~ -print

为了在当前目录中查找s u i d置位,文件属主具有读、写、执行权限,并且文件所属组的用

户和其他用户具有读和执行的权限的文件,可以用:

$ find . -type f -perm 4755 -print

为了查找系统中所有文件长度为0的普通文件,并列出它们的完整路径,可以用:

$ find / -type f -size 0 -exec ls -l {} \;

为了查找/ v a r / l o g s目录中更改时间在7日以前的普通文件,并删除它们,可以用:

$ find /var/logs -type f -mtime +7 -exec rm {} \;

为了查找系统中所有属于a u d i t组的文件,可以用:

$find /-name -group audit -print

我们的一个审计系统每天创建一个审计日志文件。日志文件名的最后含有数字,这样我

们一眼就可以看出哪个文件是最新的,哪个是最旧的。A d m i n . l o g 文件编上了序号:

a d m i n . l o g . 0 0 1、a d m i n . l o g . 0 0 2等等。下面的f i n d命令将删除/ l o g s目录中访问时间在7日以前、

含有数字后缀的a d m i n . l o g文件。该命令只检查三位数字,所以相应日志文件的后缀不要超过

9 9 9。

$ find /logs -name 'admin.log[0-9][0-9][0-9] '-atime +7 -exec rm {} \;

为了查找当前文件系统中的所有目录并排序,可以用:

$ find . -type d -print -local -mount |sort

为了查找系统中所有的r m t磁带设备,可以用:

$ find /dev/rmt -print

xargs

在使用f i n d命令的- e x e c选项处理匹配到的文件时, f i n d命令将所有匹配到的文件一起传递

给e x e c执行。不幸的是,有些系统对能够传递给e x e c的命令长度有限制,这样在f i n d命令运行

几分钟之后,就会出现溢出错误。错误信息通常是"参数列太长"或"参数列溢出"。这就是

x a rg s命令的用处所在,特别是与f i n d命令一起使用。F i n d命令把匹配到的文件传递给x a rg s命

令,而x a rg s命令每次只获取一部分文件而不是全部,不像- e x e c选项那样。这样它可以先处理

最先获取的一部分文件,然后是下一批,并如此继续下去。在有些系统中,使用- e x e c选项会

为处理每一个匹配到的文件而发起一个相应的进程,并非将匹配到的文件全部作为参数一次

执行;这样在有些情况下就会出现进程过多,系统性能下降的问题,因而效率不高;而使用

x a rg s命令则只有一个进程。另外,在使用x a rg s命令时,究竟是一次获取所有的参数,还是分

批取得参数,以及每一次获取参数的数目都会根据该命令的选项及系统内核中相应的可调参

数来确定。

让我们来看看x a rg s命令是如何同f i n d命令一起使用的,并给出一些例子。

下面的例子查找系统中的每一个普通文件,然后使用x a rg s命令来测试它们分别属于哪类

文件:

下面的例子在整个系统中查找内存信息转储文件(core mp) ,然后把结果保存到

/tmp/core.log 文件中:

$ find . -name "core" -print | xargs echo "" >/tmp/core.log

下面的例子在/ a p p s / a u d i t目录下查找所有用户具有读、写和执行权限的文件,并收回相应

的写权限:

$ find /apps/audit -perm -7 -print | xargs chmod o-w

在下面的例子中,我们用g r e p命令在所有的普通文件中搜索d e v i c e这个词:

$ find / -type f -print | xargs grep "device"

在下面的例子中,我们用g r e p命令在当前目录下的所有普通文件中搜索D B O这个词:

$ find . -name \ *-type f -print | xargs grep "DBO"

注意,在上面的例子中, \用来取消f i n d命令中的*在s h e l l中的特殊含义。

小结

f i n d命令是一个非常优秀的工具,它可以按照用户指定的准则来匹配文件。使用e x e c和

x a rg s可以使用户对所匹配到的文件执行几乎所有的命令。