⑴ 如何在C语言中调用shell命令
C语言中调用shell指令,根据调用指令目的,可以区分如下两种情况:
一、需要shell指令执行某一功能,如创建文件夹,或者删除文件夹等,程序中不关注shell指令的输出,那么可以使用system函数。
system函数声明于stdlib.h, 功能为调用系统命令,形式为
int system(const char *cmd);
其中cmd为要执行的命令字符串,返回值为执行是否成功的标记。
比如在Linux下要删除当前文件夹下的所有扩展名为a的文件,即*.a, 可以写作
system("rm*.a-f");
二、不仅要执行shell命令,还需要得知运行的打印结果,并在程序中使用。
对于此,有两种方案:
1、用system命令,将输出重定向到一个txt文件中,执行后,再读取txt文件,使用后删除。
比如Linux下获取剩余内存的指令可以写作:
system("free>result.txt");//结果重定向到result.txt中。FILE*fp=fopen("result.txt","r");//打开文件。intr;while(fgetc(fp)!='');//忽略第一行。fscanf(fp,"%*s%*d%*d%d",&r);//读取第四个域的值,即剩余内存值。printf("剩余内存为%dKB",r);//打印结果。fclose(fp);//关闭文件。unlink("result.txt");//删除临时文件。
2、使用重定向,需要经过磁盘读写,还要删除文件,相对低效。同时还有可能出现临时文件和已有文件重名,导致误删数据的情况。 所以一般使用更方便快捷的方式,即调用popen。
FILE *popen(const char *cmd, const char *mode);
使用popen的功能和system类似,属于方法1中执行命令和打开文件的一个组合。不过这里用到的文件是隐式的,并不会在系统中真正存在。返回的指针即结果文件指针。 当使用pclose关闭后,文件自动销毁。
方法1中的例子,用popen实现如下:
FILE*fp=popen("free","r");//执行命令,同时创建管道文件。intr;while(fgetc(fp)!='');//忽略第一行。fscanf(fp,"%*s%*d%*d%d",&r);//读取第四个域的值,即剩余内存值。printf("剩余内存为%dKB",r);//打印结果。pclose(fp);//关闭并销毁管道文件。
三、注意事项:
虽然调用shell命令有时可以大大减少代码量,甚至有千行代码不如一句shell的说法,不过调用shell命令还是有局限性的:
1、使用shell命令会调用系统资源,效率偏低;
2、不同平台的shell指令不同,导致可移植性下降;
3、调用shell命令时会复制当前进程(fork),如果当前进程的资源占有比较大,会导致瞬间资源占用极大,甚至可能出现失败。
所以,在编码时,除非是测试性的代码,否则在正式代码中不建议使用shell。
⑵ 急!!!cshell.dll应该放在哪里
C:\WINDOWS\SYSTEM32\或者是你安装的二战狙击手的程序根目录下。
⑶ 不小心将注册表HKEY_CLASSES_ROOT的link文件夹删了,桌面图标无法使用,桌面办
记事本 写入Windows Registry Editor Version 5.00[HKEY_CLASSES_ROOT\.lnk]@="lnkfile"[HKEY_CLASSES_ROOT\.lnk\ShellEx][HKEY_CLASSES_ROOT\.lnk\ShellEx\{000214EE-0000-0000-C000-000000000046}]@="{00021401-0000-0000-C000-000000000046}"[HKEY_CLASSES_ROOT\.lnk\ShellEx\{000214F9-0000-0000-C000-000000000046}]@="{00021401-0000-0000-C000-000000000046}"[HKEY_CLASSES_ROOT\.lnk\ShellEx\{00021500-0000-0000-C000-000000000046}]@="{00021401-0000-0000-C000-000000000046}"[HKEY_CLASSES_ROOT\.lnk\ShellEx\{BB2E617C-0920-11d1-9A0B-00C04FC2D6C1}]@="{00021401-0000-0000-C000-000000000046}"[HKEY_CLASSES_ROOT\.lnk\ShellNew]"Command"="rundll32.exe appwiz.cpl,NewLinkHere %1"保存把他改成lnk。reg导入重启
⑷ 向C:\WINDOWS\System32\文件夹里面复制CShell.dll文件,提示拒绝访问
启动故障恢复控制台、创建临时文件夹、将现有注册表文件备份到新位置、删除现有位置的注册表文件,然后将注册表文件从修复文件夹复制到 System32\Config 文件夹中。完成此过程之后将创建一个注册表,您可以使用此注册表启动 Windows XP 具体步骤 将 Windows XP 启动盘插入软盘驱动器,或将 Windows XP 安装光盘插入 CD-ROM 驱动器,然后重新启动计算机。 按照提示,单击以选中从 CD-ROM 驱动器启动计算机所需的所有选项。 出现“欢迎使用安装程序”屏幕时,按 R 键启动故障恢复控制台。 如果您使用的是双启动或多启动计算机,请从故障恢复控制台中选择要访问的安装。 按照提示,键入管理员密码。如果管理员密码为空,则只需按 Enter 键。 在故障恢复控制台命令提示符处,键入下列几行命令,并在每行之后按 Enter 键: md tmp c:\windows\system32\config\system c:\windows\tmp\system.bak c:\windows\system32\config\software c:\windows\tmp\software.bak c:\windows\system32\config\sam c:\windows\tmp\sam.bak c:\windows\system32\config\security c:\windows\tmp\security.bak c:\windows\system32\config\default c:\windows\tmp\default.bak delete c:\windows\system32\config\system delete c:\windows\system32\config\software delete c:\windows\system32\config\sam delete c:\windows\system32\config\security delete c:\windows\system32\config\default c:\windows\repair\system c:\windows\system32\config\system c:\windows\repair\software c:\windows\system32\config\software c:\windows\repair\sam c:\windows\system32\config\sam c:\windows\repair\security c:\windows\system32\config\security c:\windows\repair\default c:\windows\system32\config\default 键入 exit 退出故障恢复控制台。计算机将重新启动。 ——————————– 二 ———————————– 如何进入控制台:放入安装光盘,设从光驱启动,经过一段时间的初始化,出现提示操 作界面,按R进入控制台。输入操作系统的编号即可进入相应的控制台。这时系统会提示 输入密码即Administrator帐户密码。 windows/system32/config/system,这个是系统的注册表配置文件,如果损坏是无法进入系统的,解决方法是用DOS启动盘或进系统恢复控制台下,输入如下命令: c:\windows\repair\system c:\windows\system32\config\system ————————— 用系统安装盘引导,按“R”进入“故障恢复控制台”,如果是NTFS分区的话就需要用管理员身份进入了。 进入后肯定是在系统目录下,如:“C:\WINDOWS” md tmp c:\windows\system32\config\system c:\windows\tmp\system.bak delete c:\windows\system32\config\system 上面这3步只是备份你原来的系统信息,不过其实也是多此一举,都已经损坏了,再备份有什么用啊 c:\windows\repair\system c:\windows\system32\config\system 这才是最关键的,repair目录下放着最原始的这些系统信息文件,把它们到损坏的文件目录中后键入“EXIT”重启就能看见那个你朝思暮想的启动LOGO了。 不过进入系统后你需要重新安装你的所有硬件驱动。参考资料:转贴最近很疯狂的在网上搜图、下图,终于有一天电脑提示说找不到指定的文件夹。点击帮助后提示找不到c:\windows\system32\mshtml.hlp这个文件。可把我给急死了。这是杀毒或卸载软件不干净留下的后遗症。解决方法如下: 1):点击"开始"–运行–输入msconfig后回车–点击"启动"–找到mshtml.hlp ,把前面的勾去掉.(如果找不到.那么只保留"ctfmon\杀毒软件\防火墙,"其它前面的勾都去掉.这样不会影响系统的任何运行)–然后点击"应用"–点击"关闭". 我的电脑出现的是括号里的情况,然后电脑就提示需要重启。接下来只要按照3)完成就解决问题了。2):点击"开始"–运行–输入regedit后回车–按F3键,查找目标中输入mshtml.hlp ,回车查找,找到删除.重复按F3键查找并删除.直到找不到为止。3):重启电脑,重启后,在弹出的窗口中添加勾选,点击确定按钮即可。1
⑸ 怎样用C语言将文件复制另外的文件夹
有两种方式可以实现复制:一、自行编写函数,实现复制。算法流程如下:1 以读的方式打开源文件,以写的方式打开目标文件;2 每次读一个字节,并写到目标文件中,直到达到文件结尾为止;3 关闭两个文件。二、调用系统命令。stdlib.h中的system函数,可以执行系统命令行支持的命令。int system(char *cmd);调用时就是执行cmd中的指令。1 对于windows,就是执行dos命令,可以调用system(" /Y src_file target_dir");其中src_file为源文件,而target_dir就是目标文件夹。2 对于Linux,需要执行shell命令cp,如下system("cp src_file target_dir");
⑹ win8 64位 下运行CF 穿越火线 cshell.dll问题
你好 这说明CF里的CShell.dll这个文件损坏或丢失了,自己去网上下载个最新补丁包,把里面得CShell.dll复制出来,然后放到CF根目录里,如果不行,就把C:\WINDOWS\System32\CShell.dll也删除了,替换上最新补丁包里的文件! 如果cshell.dll的时候显示 无法复制cshell:访问被拒绝的话那就关闭你正在运行的所有程序,或者先提前复制好,然后打开那个文件夹,点注销,然后点了后看见屏幕闪了一下马上就点粘贴即可,或者在WindowsPE系统环境下复制
⑺ CSHELL如何完成这样的功能,判断一个文件夹下面是否存在文件
可以用find来查找,根来据查源找的返回状态变量来判断#!bin/cshfind . -name filenameif($? == 0) # C shell 的if判断不知道是不是这样,具体的给忘了,状态变量是$? echo "filename 存在"else echo "filenam 不存在"endif
⑻ cshell.dll 这个文件丢失了`启动不了穿越·怎么办
这说明CF里的CShell.dll这个文件损坏或丢失了,自己去网上下载个最新补丁包,把里面得CShell.dll复制出来,然后放到CF根目录里,如果不行,就把C:\WINDOWS\System32\CShell.dll也删除了,替换上最新补丁包里的文件!
⑼ CF的cshell.dll在哪
如果想找到cshell.dll在游戏文件夹里搜索或者在C盘里搜索 你想替换一个就在再度上输入cshell.dll就有下载的很快的