当前位置: 首页 > news >正文

做企业内部网站要多久牛商做网站的理念

做企业内部网站要多久,牛商做网站的理念,英迈寰球网站建设,一级建设造师网站在VC中#xff0c;有些时候#xff0c;我们需要调用其他一些现有的EXE可执行文件#xff0c;当然#xff0c;有些时候#xff0c;我们也调用自己编写生成的EXE文件#xff0c;以完成对不同选择条件的反应。 通过总结#xff0c;基本上调用EXE文件的办法有四种#xff1…在VC中有些时候我们需要调用其他一些现有的EXE可执行文件当然有些时候我们也调用自己编写生成的EXE文件以完成对不同选择条件的反应。 通过总结基本上调用EXE文件的办法有四种 一、WinExec() 这个函数在VB和VC中都有百度百科中的解释是这样的 WinExec VB声明 Declare Function WinExec Lib kernel32 Alias WinExec (ByVal lpCmdLine As String, ByVal nCmdShow As Long) As Long 说明 运行指定的程序 返回值 Long大于32表示成功请参考FindExecutable函数 参数表 参数 类型及说明 lpCmdLine String包含要执行的命令行 nCmdShow Long定义了以怎样的形式启动程序的常数值。参考ShowWindow函数的nCmdShow参数 注解 请参考对CreateProcess函数的说明了解在目录中查找指定文件的顺序 VC中如何使用 WINSHELLAPI void WINAPI WinExecErrorA(HWND hwnd, int error, LPCSTR lpstrFileName, LPCSTR lpstrTitle); WINSHELLAPI void WINAPI WinExecErrorW(HWND hwnd, int error, LPCWSTR lpstrFileName, LPCWSTR lpstrTitle); 参数说明 hwnd窗口句柄一般为NULL error出错信息 lpstrFileName 文件名 lpstrTitle 标题名 二、ShellExecute(ShellExecuteEx) 百度百科中的解释相当详细 ShellExecute的功能是运行一个外部程序或者是打开一个已注册的文件、打开一个目录、打印一个文件等等并对外部程序有一定的控制。 有几个API函数都可以实现这些功能但是在大多数情况下ShellExecute是更多的被使用的同时它并不是太复杂。 ShellExecute函数原型及参数含义如下 ShellExecute( HWND hwnd, //父窗口句柄 如NULLHandle等 LPCSTR lpOperation, //操作类型 如open*要加英文双引号 LPCSTR lpFile, //要进行操作的文件或路径 LPCSTR lpParameters, //当lpOperation为“explore”时指定要传递的参数通常设为NULL LPCSTR lpDirectory, //指定默认目录通常设为NULL INT nShowCmd //文件打开的方式以通常方式还是最大化或最小化显示一般为SW_SHOWNORMAL ) 例子如下 //调用计算器 ShellExecute(NULL,open,calc.exe,NULL,NULL,SW_SHOWNORMAL); //调用记事本 ShellExecute(NULL,open,NOTEPAD.EXE,NULL,NULL,SW_SHOWNORMAL); ●hWnd用于指定父窗口句柄。当函数调用过程出现错误时它将作为Windows消息窗口的父窗口。例如可以将其设置为应用程序主窗口句柄即Application.Handle也可以将其设置为桌面窗口句柄用GetDesktopWindow函数获得。 ●Operation用于指定要进行的操作。其中“open”操作表示执行由FileName参数指定的程序或打开由FileName参数指定的文件或文件夹“print”操作表示打印由FileName参数指定的文件“explore”操作表示浏览由FileName参数指定的文件夹。当参数设为nil时表示执行默认操作“open”。 ●FileName用于指定要打开的文件名、要执行的程序文件名或要浏览的文件夹名。 ●Parameters若FileName参数是一个可执行程序则此参数指定命令行参数否则此参数应为nil或PChar(0)。 ●Directory用于指定默认目录。 ●ShowCmd若FileName参数是一个可执行程序则此参数指定程序窗口的初始显示方式否则此参数应设置为0。 若ShellExecute函数调用成功则返回值为被执行程序的实例句柄。若返回值小于32则表示出现错误。 上述仅仅是ShellExecute函数的标准用法下面将介绍它的特殊用法。 2.特殊用法 如果将FileName参数设置为“http:”协议格式那么该函数将打开默认浏览器并链接到指定的URL地址。若用户机器中安装了多个浏览器则该函数将根据Windows 9x/NT注册表中http协议处理程序Protocols Handler的设置确定启动哪个浏览器。 格式一http://网站域名。 如ShellExecute(Handle, open, http:// ; www.neu.edu.cn’, NULL, NULL, SW_SHOWNORMAL); 格式二http://网站域名/网页文件名。 如ShellExecute(Handle, open, http:// ; www.neu.edu.cn/default.htm,NULL,NULL, SW_SHOWNORMAL); 如果将FileName参数设置为“mailto:”协议格式那么该函数将启动默认邮件客户程序如Microsoft Outlook也包括Microsoft Outlook Express或Netscape Messanger。若用户机器中安装了多个邮件客户程序则该函数将根据Windows 9x/NT注册表中mailto协议处理程序的设置确定启动哪个邮件客户程序。 格式一mailto: 如ShellExecute(Handle,open, mailto:, NULL, NULL, SW_SHOWNORMAL);打开新邮件窗口。 格式二mailto:用户账号邮件服务器地址 如ShellExecute(Handle, open, mailto:whomail.neu.edu.cn, NULL, NULL, SW_SHOWNORMAL);打开新邮件窗口并自动填入收件人地址。若指定多个收件人地址则收件人地址之间必须用分号或逗号分隔开下同。 格式三mailto:用户账号邮件服务器地址?subject邮件主题body邮件正文 如ShellExecute(handle, ‘open’, ‘ mailto:whomail.neu.edu.cnsubjectHelloBodyThis is a test’, nil, nil, SW_SHOWNORMAL);打开新邮件窗口并自动填入收件人地址、邮件主题和邮件正文。若邮件正文包括多行文本则必须在每行文本之间加入换行转义字符0a。 例子(delphi): 在一个应用程序调用c:\Project1.exe; ShellExecute(handle, open,c:\Project1.exe,字串内容,nil, SW_SHOWNORMAL); 在Project1.exe里可以调用: procedure TForm1.FormCreate(Sender: TObject); var i:integer; begin for i:1 to paramcount do if ParamStr(i) then showmessage(ParamStr(i)); end; 最后的那个参数为窗口指定可视性方面的一个命令。 请用下述任何一个常数 SW_HIDE 隐藏窗口活动状态给另一个窗口 SW_MINIMIZE 最小化窗口活动状态给另一个窗口 SW_RESTORE 用原来的大小和位置显示一个窗口同时令其进入活动状态 SW_SHOW 用当前的大小和位置显示一个窗口同时令其进入活动状态 SW_SHOWMAXIMIZED 最大化窗口并将其激活 SW_SHOWMINIMIZED 最小化窗口并将其激活 SW_SHOWMINNOACTIVE 最小化一个窗口同时不改变活动窗口 SW_SHOWNA 用当前的大小和位置显示一个窗口不改变活动窗口 SW_SHOWNOACTIVATE 用最近的大小和位置显示一个窗口同时不改变活动窗口 SW_SHOWNORMAL 与SW_RESTORE相同 三、CreateProcess() WIN32API函数CreateProcess用来创建一个新的进程和它的主线程这个新进程运行指定的可执行文件。  一函数原型  BOOL CreateProcess ( LPCTSTR lpApplicationName, LPTSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes。 LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles, DWORD dwCreationFlags, LPVOID lpEnvironment, LPCTSTR lpCurrentDirectory, LPSTARTUPINFO lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation ); 1.lpApplicationName 二参数 指向一个NULL结尾的、用来指定可执行模块的字符串。 这个字符串可以使可执行模块的绝对路径也可以是相对路径在后一种情况下函数使用当前驱动器和目录建立可执行模块的路径。 这个参数可以被设为NULL在这种情况下可执行模块的名字必须处于 lpCommandLine 参数的最前面并由空格符与后面的字符分开。 这个被指定的模块可以是一个Win32应用程序。如果适当的子系统在当前计算机上可用的话它也可以是其他类型的模块如MS-DOS 或 OS/2。 在Windows NT中如果可执行模块是一个16位的应用程序那么这个参数应该被设置为NULL并且因该在lpCommandLine参数中指定可执行模块的名称。16位的应用程序是以DOS虚拟机或Win32上的WindowsWOW 为进程的方式运行。 2.lpCommandLine 指向一个NULL结尾的、用来指定要运行的命令行。 这个参数可以为空那么函数将使用参数指定的字符串当作要运行的程序的命令行。 如果lpApplicationName和lpCommandLine参数都不为空那么lpApplicationName参数指定将要被运行的模块lpCommandLine参数指定将被运行的模块的命令行。新运行的进程可以使用GetCommandLine函数获得整个命令行。C语言程序可以使用argc和argv参数。 如果lpApplicationName参数为空那么这个字符串中的第一个被空格分隔的要素指定可执行模块名。如果文件名不包含扩展名那么.exe将被假定为默认的扩展名。如果文件名以一个点.结尾且没有扩展名或文件名中包含路径.exe将不会被加到后面。如果文件名中不包含路径Windows将按照如下顺序寻找这个可执行文件 1).当前应用程序的目录。 2).父进程的目录。 3).Windows 95Windows系统目录可以使用GetSystemDirectory函数获得。 Windows NT32位Windows系统目录。可以使用GetSystemDirectory函数获得目录名是SYSTEM32。 4).在Windows NT中16位Windows系统目录。不可以使用Win32函数获得这个目录但是它会被搜索目录名是SYSTEM。 5).Windows目录。可以使用GetWindowsDirectory函数获得这个目录。 6).列在PATH环境变量中的目录。 如果被创建的进程是一个以MS-DOS或16位Windows为基础的应用程序lpCommandLine参数应该是一个以可执行文件的文件名作为第一个要素的绝对路径因为这样做可以使32位Windows程序工作的很好这样设置lpCommandLine参数是最强壮的。 3.lpProcessAttributes 指向一个SECURITY_ATTRIBUTES结构体这个结构体决定是否返回的句柄可以被子进程继承。如果lpProcessAttributes参数为空NULL那么句柄不能被继承。 在Windows NT中SECURITY_ATTRIBUTES结构的lpSecurityDescriptor成员指定了新进程的安全描述符如果参数为空新进程使用默认的安全描述符。 在Windows95中SECURITY_ATTRIBUTES结构的lpSecurityDescriptor成员被忽略。 4.lpThreadAttributes 指向一个SECURITY_ATTRIBUTES结构体这个结构体决定是否返回的句柄可以被子进程继承。如果lpThreadAttributes参数为空NULL那么句柄不能被继承。 在Windows NT中SECURITY_ATTRIBUTES结构的lpSecurityDescriptor成员指定了主线程的安全描述符如果参数为空主线程使用默认的安全描述符。 在Windows95中SECURITY_ATTRIBUTES结构的lpSecurityDescriptor成员被忽略。 5.bInheritHandles 指示新进程是否从调用进程处继承了句柄。 如果参数的值为真调用进程中的每一个可继承的打开句柄都将被子进程继承。被继承的句柄与原进程拥有完全相同的值和访问权限。 5.dwCreationFlags 指定附加的、用来控制优先类和进程的创建的标志。以下的创建标志可以以除下面列出的方式外的任何方式组合后指定。 (1)值CREATE_DEFAULT_ERROR_MODE 含义新的进程不继承调用进程的错误模式。CreateProcess函数赋予新进程当前的默认错误模式作为替代。应用程序可以调用SetErrorMode函数设置当前的默认错误模式。 这个标志对于那些运行在没有硬件错误环境下的多线程外壳程序是十分有用的。 对于CreateProcess函数默认的行为是为新进程继承调用者的错误模式。设置这个标志以改变默认的处理方式。 (2)值CREATE_NEW_CONSOLE 含义新的进程将使用一个新的控制台而不是继承父进程的控制台。这个标志不能与DETACHED_PROCESS标志一起使用。 (3)值CREATE_NEW_PROCESS_GROUP 含义新进程将使一个进程树的根进程。进程树种的全部进程都是根进程的子进程。新进程树的用户标识符与这个进程的标识符是相同的由lpProcessInformation参数返回。进程树经常使用GenerateConsoleCtrlEvent函数允许发送CTRLC或CTRLBREAK信号到一组控制台进程。 (4)值CREATE_SEPARATE_WOW_VDM 含义只适用于Windows NT这个标志只有当运行一个16位的Windows应用程序时才是有效的。如果被设置新进程将会在一个私有的虚拟DOS机VDM中运行。另外默认情况下所有的16位Windows应用程序都会在同一个共享的VDM中以线程的方式运行。单独运行一个16位程序的优点是一个应用程序的崩溃只会结束这一个VDM的运行其他那些在不同VDM中运行的程序会继续正常的运行。同样的在不同VDM中运行的16位Windows应用程序拥有不同的输入队列这意味着如果一个程序暂时失去响应在独立的VDM中的应用程序能够继续获得输入。 (5)值CREATE_SHARED_WOW_VDM 含义只适用于Windows NT这个标志只有当运行一个16位的Windows应用程序时才是有效的。如果WIN.INI中的Windows段的DefaultSeparateVDM选项被设置为真这个标识使得CreateProcess函数越过这个选项并在共享的虚拟DOS机中运行新进程。 (6)值CREATE_SUSPENDED 含义新进程的主线程会以暂停的状态被创建直到调用ResumeThread函数被调用时才运行。 (7)值CREATE_UNICODE_ENVIRONMENT 含义如果被设置由lpEnvironment参数指定的环境块使用Unicode字符如果为空环境块使用ANSI字符。 (8)值DEBUG_PROCESS 含义如果这个标志被设置调用进程将被当作一个调试程序并且新进程会被当作被调试的进程。系统把被调试程序发生的所有调试事件通知给调试器。 如果你使用这个标志创建进程只有调用进程调用CreateProcess函数的进程可以调用WaitForDebugEvent函数。 (9)值DEBUG_ONLY_THIS_PROCESS 含义如果此标志没有被设置且调用进程正在被调试新进程将成为调试调用进程的调试器的另一个调试对象。如果调用进程没有被调试有关调试的行为就不会产生。 (10)值DETACHED_PROCESS 含义对于控制台进程新进程没有访问父进程控制台的权限。新进程可以通过AllocConsole函数自己创建一个新的控制台。这个标志不可以与CREATE_NEW_CONSOLE标志一起使用。 6.dwCreationFlags参数 还用来控制新进程的优先类优先类用来决定此进程的线程调度的优先级。如果下面的优先级类标志都没有被指定那么默认的优先类是NORMAL_PRIORITY_CLASS除非被创建的进程是IDLE_PRIORITY_CLASS。在这种情况下子进程的默认优先类是IDLE_PRIORITY_CLASS。 可以下面的标志中的一个 优先级HIGH_PRIORITY_CLASS 含义指示这个进程将执行时间临界的任务所以它必须被立即运行以保证正确。这个优先级的程序优先于正常优先级或空闲优先级的程序。一个例子是Windows任务列表为了保证当用户调用时可以立刻响应放弃了对系统负荷的考虑。确保在使用高优先级时应该足够谨慎因为一个高优先级的CPU关联应用程序可以占用几乎全部的CPU可用时间。 优先级IDLE_PRIORITY_CLASS 含义指示这个进程的线程只有在系统空闲时才会运行并且可以被任何高优先级的任务打断。例如屏幕保护程序。空闲优先级会被子进程继承。 优先级NORMAL_PRIORITY_CLASS 含义指示这个进程没有特殊的任务调度要求。 优先级REALTIME_PRIORITY_CLASS 含义指示这个进程拥有可用的最高优先级。一个拥有实时优先级的进程的线程可以打断所有其他进程线程的执行包括正在执行重要任务的系统进程。例如一个执行时间稍长一点的实时进程可能导致磁盘缓存不足或鼠标反映迟钝。 7.lpEnvironment 指向一个新进程的环境块。如果此参数为空新进程使用调用进程的环境。 一个环境块存在于一个由以NULL结尾的字符串组成的块中这个块也是以NULL结尾的。每个字符串都是namevalue的形式。 因为相等标志被当作分隔符所以它不能被环境变量当作变量名。 与其使用应用程序提供的环境块不如直接把这个参数设为空系统驱动器上的当前目录信息不会被自动传递给新创建的进程。对于这个情况的探讨和如何处理请参见注释一节。 环境块可以包含Unicode或ANSI字符。如果lpEnvironment指向的环境块包含Unicode字符那么dwCreationFlags字段的CREATE_UNICODE_ENVIRONMENT标志将被设置。如果块包含ANSI字符该标志将被清空。 请注意一个ANSI环境块是由两个零字节结束的一个是字符串的结尾另一个用来结束这个快。一个Unicode环境块石油四个零字节结束的两个代表字符串结束另两个用来结束块。 8.lpCurrentDirectory 指向一个以NULL结尾的字符串这个字符串用来指定子进程的工作路径。这个字符串必须是一个包含驱动器名的绝对路径。如果这个参数为空新进程将使用与调用进程相同的驱动器和目录。这个选项是一个需要启动启动应用程序并指定它们的驱动器和工作目录的外壳程序的主要条件。 9.lpStartupInfo 指向一个用于决定新进程的主窗体如何显示的STARTUPINFO结构体。 10.lpProcessInformation 指向一个用来接收新进程的识别信息的PROCESS_INFORMATION结构体。 如果函数执行成功返回非零值。 (三) 返回值 如果函数执行失败返回零可以使用GetLastError函数获得错误的附加信息。 注释 CreateProcess函数用来运行一个新程序。WinExec和LoadModule函数依旧可用但是它们同样通过调用CreateProcess函数实现。 另外CreateProcess函数除了创建一个进程还创建一个线程对象。这个线程将连同一个已初始化了的堆栈一起被创建堆栈的大小由可执行文件的文件头中的描述决定。线程由文件头处开始执行。 新进程和新线程的句柄被以全局访问权限创建。对于这两个句柄中的任一个如果没有安全描述符那么这个句柄就可以在任何需要句柄类型作为参数的函数中被使用。当提供安全描述符时在接下来的时候当句柄被使用时总是会先进行访问权限的检查如果访问权限检查拒绝访问请求的进程将不能使用这个句柄访问这个进程。 这个进程会被分配给一个32位的进程标识符。直到进程中止这个标识符都是有效的。它可以被用来标识这个进程或在OpenProcess函数中被指定以打开这个进程的句柄。进程中被初始化了的线程一样会被分配一个32位的线程标识符。这个标识符直到县城中止都是有效的且可以用来在系统中唯一标识这个线程。这些标识符在PROCESS_INFORMATION结构体中返回。 当在lpApplicationName或lpCommandLine参数中指定应用程序名时应用程序名中是否包含扩展名都不会影响运行只有一种情况例外一个以.com为扩展名的MS-DOS程序或Windows程序必须包含.com扩展名。 调用进程可以通过WaitForInputIdle函数来等待新进程完成它的初始化并等待用户输入。这对于父进程和子进程之间的同步是极其有用的因为CreateProcess函数不会等待新进程完成它的初始化工作。举例来说在试图与新进程关联的窗口之前进程应该先调用WaitForInputIdle。 首选的结束一个进程的方式是调用ExitProcess函数因为这个函数通知这个进程的所有动态链接库DLLs程序已进入结束状态。其他的结束进程的方法不会通知关联的动态链接库。注意当一个进程调用ExitProcess时这个进程的其他县城没有机会运行其他任何代码包括关联动态链接库的终止代码。 ExitProcess, ExitThread, CreateThread, CreateRemoteThread当一个进程启动时调用了CreateProcess的结果是在进程中序列化进行的。在一段地址空间中同一时间内这些事件中只有一个可以发生。这意味着下面的限制将保留 *在进程启动和DLL初始化阶段新的线程可以被创建但是直到进程的DLL初始化完成前它们都不能开始运行。 *在DLL初始化或卸下例程中进程中只能有一个线程。 *直到所有的线程都完成DLL初始化或卸下后ExitProcess函数才返回。 在进程中的所有线程都终止且进程所有的句柄和它们的线程被通过调用CloseHandle函数终止前进程会留在系统中。进程和主线程的句柄都必须通过调用CloseHandle函数关闭。如果不再需要这些句柄最好在创建进程后立刻关闭它们。 当进程中最后一个线程终止时下列的事件发生 *所有由进程打开的对象都会关闭。 *进程的终止状态由GetExitCodeProcess函数返回从它的初始值STILL_ACTIVE变为最后一个结束的线程的结束状态。 *主线程的线程对象被设置为标志状态供其他等待这个对象的线程使用。 *进程对象被设置为标志状态供其他等待这个对象的线程使用。 假设当前在C盘上的目录是\MSVC\MFC且有一个环境变量叫做C:它的值是C:\MSVC\MFC就像前面lpEnvironment中提到过的那样这样的系统驱动器上的目录信息在CreateProcess函数的lpEnvironment参数不为空时不会被自动传递到新进程里。一个应用程序必须手动地把当前目录信息传递到新的进程中。为了这样做应用程序必须直接创建环境字符串并把它们按字母顺序排列因为Windows NT和Windows 95使用一种简略的环境变量并把它们放进lpEnvironment中指定的环境块中。类似的他们要找到环境块的开头又要重复一次前面提到的环境块的排序。 一种获得驱动器X的当前目录变量的方法是调用GetFullPathName(x:,..)。这避免了一个应用程序必须去扫描环境块。如果返回的绝对路径是X:\就不需要把这个值当作一个环境数据去传递了因为根目录是驱动器X上的新进程的默认当前目录。 由CreateProcess函数返回的句柄对于进程对象具有PROCESS_ALL_ACCESS的访问权限。 由lpcurrentDirectory参数指定的当前目录室子进程对象的当前目录。lpCommandLine参数指定的第二个项目是父进程的当前目录。 对于Windows NT当一个进程在指定了CREATE_NEW_PROCESS_GROUP的情况下被创建时一个对于SetConsoleCtrlHandler(NULL,True)的调用被用在新的进程上这意味着对新进程来说CTRLC是无效的。这使得上层的外科程序可以自己处理CTRLC信息并有选择的把这些信号传递给子进程。CTRLBREAK依旧有效并可被用来中断进程/进程树的执行。 安全注释 第一个参数lpApplicationName可能是空这种情况下可执行文件的名字必须在lpCommandLine中lpCommandLine参数中可以包含空格。如果可执行文件或路径中包含空格那么就会有执行不正确文件的风险这是由于这个函数解析空格的方法引起的。例如下边这个例子就很危险因为它试图运行Program.exe文件如果这个文件存在它就会代替MyApp.exe文件的运行。 CreateProcess(NULL”C:\\Program Files\\MyApp.exe”…….) 如果有恶意的用户在系统编写了一个名为Program.exe的文件那么任何调用CreateProcess函数且在文件路径中使用Program Files文件夹的参数都有可能会运行Program.exe文件而不是运行本来打算运行的文件。 要避免这个问题可以不要将NULL值传递给lpApplicationName参数或者在lpCommandLine中使用双引号(转义符)括起可执行文件的全路径名如下所示 CreateProcess(NULL,”\”C:\\Program Files\\MyApp.exe\” -L -S”,…….) -L和-S是MyApp.exe可执行文件的参数。 最后要说明的一点是在lpApplicationName中的参数和lpCommandLine中的第一个参数是一样的有人说显得有些重复其实这样做纯粹是一种被公认化了习惯 参见  AllocConsole, CloseHandle, CreateRemoteThread, CreateThread, ExitProcess, ExitThread, GenerateConsoleCtrlEvent, GetCommandLine, GetEnvironmentStrings, GetExitCodeProcess, GetFullPathName, GetStartupInfo, GetSystemDirectory, GetWindowsDirectory, LoadModule, OpenProcess, PROCESS_INFORMATION, ResumeThread, SECURITY_ATTRIBUTES, SetConsoleCtrlHandler, SetErrorMode, STARTUPINFO, TerminateProcess, WaitForInputIdle, WaitForDebugEvent, WinExec 快捷信息 导入库kernel32.lib 头文件Winbase.h 四简单例子 #include iostream #includewindows.h using namespace std; int main() { STARTUPINFO si; //一些必备参数设置 memset(si, 0, sizeof(STARTUPINFO)); si.cb sizeof(STARTUPINFO); si.dwFlags STARTF_USESHOWWINDOW; si.wShowWindow SW_SHOW; PROCESS_INFORMATION pi; //必备参数设置结束 if(!CreateProcess(NULL,d:\\test\\te.exe,NULL,NULL,FALSE,0,NULL,NULL,si,pi)) //d:\\test\\te.exe是您要运行的程序//的路径 { coutCreate Fail!endl; exit(1); } else { coutSucess!endl; } return 0; } 四、System() int system( const char *command );  int _wsystem( const wchar_t *command );  command: Command to be executed  sample: //system.c  #include process.h  void main( void )  {  system( type system.c );  }  system函数 是可以调用一些DOS命令,比如  system(cls);//清屏,等于在DOS上使用cls命令  下面列出常用的DOS命令,都可以用system函数调用:  ASSOC 显示或修改文件扩展名关联。  AT 计划在计算机上运行的命令和程序。  ATTRIB 显示或更改文件属性。  BREAK 设置或清除扩展式 CTRLC 检查。  CACLS 显示或修改文件的访问控制列表(ACLs)。  CALL 从另一个批处理程序调用这一个。  CD 显示当前目录的名称或将其更改。  CHCP 显示或设置活动代码页数。  CHDIR 显示当前目录的名称或将其更改。  CHKDSK 检查磁盘并显示状态报告。  CHKNTFS 显示或修改启动时间磁盘检查。  CLS 清除屏幕。  CMD 打开另一个 Windows 命令解释程序窗口。  COLOR 设置默认控制台前景和背景颜色。  COMP 比较两个或两套文件的内容。  COMPACT 显示或更改 NTFS 分区上文件的压缩。  CONVERT 将 FAT 卷转换成 NTFS。您不能转换当前驱动器。  COPY 将至少一个文件复制到另一个位置。  DATE 显示或设置日期。  DEL 删除至少一个文件。  DIR 显示一个目录中的文件和子目录。  DISKCOMP 比较两个软盘的内容。  DISKCOPY 将一个软盘的内容复制到另一个软盘。  DOSKEY 编辑命令行、调用 Windows 命令并创建宏。  ECHO 显示消息或将命令回显打开或关上。  ENDLOCAL 结束批文件中环境更改的本地化。  ERASE 删除至少一个文件。  EXIT 退出 CMD.EXE 程序(命令解释程序)。  FC 比较两个或两套文件并显示不同处。  FIND 在文件中搜索文字字符串。  FINDSTR 在文件中搜索字符串。  FOR 为一套文件中的每个文件运行一个指定的命令  FORMAT 格式化磁盘以便跟 Windows 使用。  FTYPE 显示或修改用于文件扩展名关联的文件类型。  GOTO 将 Windows 命令解释程序指向批处理程序中某个标明的行。  GRAFTABL 启用 Windows 来以图像模式显示扩展字符集。  HELP 提供 Windows 命令的帮助信息。  IF 执行批处理程序中的条件性处理。  LABEL 创建、更改或删除磁盘的卷标。  MD 创建目录。  MKDIR 创建目录。  MODE 配置系统设备。  MORE 一次显示一个结果屏幕。  MOVE 将文件从一个目录移到另一个目录。  PATH 显示或设置可执行文件的搜索路径。  PAUSE 暂停批文件的处理并显示消息。  POPD 还原 PUSHD 保存的当前目录的上一个值。  PRINT 打印文本文件。  PROMPT 更改 Windows 命令提示符。  PUSHD 保存当前目录然后对其进行更改。  RD 删除目录。  RECOVER 从有问题的磁盘恢复可读信息。  REM 记录批文件或 CONFIG.SYS 中的注释。  REN 重命名文件。  RENAME 重命名文件。  REPLACE 替换文件。  RMDIR 删除目录。  SET 显示、设置或删除 Windows 环境变量。  SETLOCAL 开始批文件中环境更改的本地化。  SHIFT 更换批文件中可替换参数的位置。  SORT 对输入进行分类。  START 启动另一个窗口来运行指定的程序或命令。  SUBST 将路径跟一个驱动器号关联。  TIME 显示或设置系统时间。  TITLE 设置 CMD.EXE 会话的窗口标题。  TREE 以图形模式显示驱动器或路径的目录结构。  TYPE 显示文本文件的内容。  VER 显示 Windows 版本。  VERIFY 告诉 Windows 是否验证文件是否已正确写入磁盘。  VOL 显示磁盘卷标和序列号。  XCOPY 复制文件和目录树。 system执行shell 命令  相关函数 forkexecvewaitpidpopen 表头文件 #includestdlib.h 定义函数 int system(const char * string); 函数说明 system()会调用fork()产生子进程由子进程来调用/bin/sh-c string来执行参数string字符串所代表的命令此命令执行完后随即返回原调用的进程。在调用system()期间SIGCHLD 信号会被暂时搁置SIGINT和SIGQUIT 信号则会被忽略。 返回值 如果system()在调用/bin/sh时失败则返回127其他失败原因返回-1。若参数string为空指针(NULL)则返回非零值。如果system()调用成功则最后会返回执行shell命令后的返回值但是此返回值也有可能为system()调用/bin/sh失败所返回的127因此最好能再检查errno 来确认执行成功。 附加说明 在编写具有SUID/SGID权限的程序时请勿使用system()system()会继承环境变量通过环境变量可能会造成系统安全的问题。 范例 #includestdlib.h main() { system(“ls -al /etc/passwd /etc/shadow”); } 执行 -rw-r--r-- 1 root root 705 Sep 3 13 :52 /etc/passwd -r--------- 1 root root 572 Sep 2 15 :34 /etc/shadow
http://www.w-s-a.com/news/773154/

相关文章:

  • 河南国基建设集团--官方网站wordpress qode
  • 做农村电子商务的网站有哪些内容静态网站模板古典
  • 导航网站设计方案个人网站推广方法
  • 网站排名易下拉教程防wordpress花园
  • 计算机网站建设 是什么意思现在网站建站的主流语言是什么
  • php网站跟随导航西安百姓网免费发布信息网
  • 濮阳做公司网站html5 特效网站
  • ppt设计器怎么打开深圳seo网络推广营销
  • 建设银行网站用360浏览器建设信用卡中心网站
  • 创建公司网站 教程广州建设局
  • 详述网站建设的过程简答题ui培训设计怎么样
  • 动易网站官网ppt主题大全素材
  • 怎样用eclipse做网站可以做宣传图的网站
  • 哪里可以做游戏视频网站做网站平台应该注意哪些
  • 网站后期推广是谁来做网页制作步骤作答题
  • 全屋装修设计定制整装成都网站优化多少钱
  • html5购物网站模板一个网站两个数据库
  • 个人网站怎么做微信支付网站建设项目介绍
  • 建网站合同网站适配移动端和PC端
  • 网站建设培训机构哪里好html5开发wap网站
  • 免费自助建站源码学而思网校官网
  • 中国最大的网站制作公司青海省高等级公路建设管局网站
  • 建设网站对服务器有什么要求吗wordpress去除更新提示
  • 找个为公司做网站的手机端原神
  • 邯郸手机建站价格公众号开发者权限哪里添加
  • wordpress模板电子书下载站微信app官方免费下载
  • 从哪些方面进行网站建设如何做网站的实时画面
  • 设计网站公司收费西安小程序开发公司有哪些
  • 如何建网站赚取佣金哪个网站可以做免费宣传
  • 万网手机网站seo方法