㈠ 如何在C語言中調用cmd命令
在C語言中調用shell命令的方法實現。
C程序調用shell腳本共有兩種方法 :system()、popen(),分別如下:
system()
不用自己去創建進程,系統已經封裝了這一步,直接加入自己的命令即可
popen() 也可以實現執行的命令,比system
開銷小
以下分別說明:
1)system(shell命令或shell腳本路徑);
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 來確認履行 成功 。
system命令以其簡略
高效的作用得到很很廣泛 的利用 ,下面是一個例子
例:在/tmp/testDir/目錄下有shell腳本tsh.sh,內容為
#!/bin/sh
wget $1
echo "Done!"
2)popen(char
*command,char *type)
popen()
會調用fork()產生 子歷程,然後從子歷程中調用/bin/sh -c來履行 參數command的指令。參數type可應用
「r」代表讀取,「w」代表寫入。遵循此type值,popen()會建立 管道連到子歷程的標准 輸出設備 或標准 輸入設備
,然後返回一個文件指針。隨後歷程便可利用 此文件指針來讀取子歷程的輸出設備 或是寫入到子歷程的標准 輸入設備 中。此外,所有應用 文
件指針(FILE*)操作的函數也都可以應用 ,除了fclose()以外。
返回值:若成功
則返迴文件指針,否則返回NULL,差錯 原因存於errno中。注意:在編寫具SUID/SGID許可權的程序時請盡量避免應用
popen(),popen()會繼承環境變數,通過環境變數可能會造成系統安全的問題。
例:C程序popentest.c內容如下:
#include<stdio.h>
main
{
FILE * fp;
charbuffer[80];
fp=popen(「~/myprogram/test.sh」,」r」);
fgets(buffer,sizeof(buffer),fp);
printf(「%s」,buffer);
pclose(fp);
}
Java語言以其跨平台性和簡易性而著稱,在Java裡面的lang包里(java.lang.Runtime)提供了一個允許Java程序與該程序所運
行的環境交互的介面,這就是Runtime類,在Runtime類里提供了獲取當前運行環境的介面。
其中的exec函數返回一個執行shell命令的子進程。exec函數的具體實現形式有以下幾種:
public Process exec(String command) throws IOException
public Process exec(String command,String[] envp) throws
IOException
public Process exec(String command,String[] envp,File dir) throws
IOException
public Process exec(String[] cmdarray) throws IOException
public Process exec(String[] cmdarray, String[] envp) throws
IOException
public Process exec(String[] cmdarray, String[] envp,File dir)
throws IOException
我們在這里主要用到的是第一個和第四個函數,具體方法很簡單,就是在exec函數中傳遞一個代表命令的字元串。exec函數返回的是一個Process類
型的類的實例。Process類主要用來控制進程,獲取進程信息等作用。(具體信息及其用法請參看Java doc)。
1)執行簡單的命令的方法:
代碼如下:
㈢ 要想用命令行輸入命令的方式重復調用命令,應該在命令行輸入的命令是什麼
不知題主電腦是什麼操作系統。
Windows系統的話,在開始/運行框輸入CMD確定可以調出命令行界面(開始/程序/命令提示符)也可以。
㈣ Android-java怎麼調用命令行的命令
我共享份代碼 2.1 ~ 4.0 測試都能通過
/** 執行 shell 命令之後返回 String 類型的結果 */
public static StringexecShellStr(String cmd)
{
String[] cmdStrings = new String[] {"sh", "-c", cmd};
String retString = "";
try
{
Process process = Runtime.getRuntime().exec(cmdStrings);
BufferedReader stdout =
new BufferedReader(new InputStreamReader(
process.getInputStream()), 7777);
BufferedReader stderr =
new BufferedReader(new InputStreamReader(
process.getErrorStream()), 7777);
String line = null;
while ((null != (line = stdout.readLine()))
|| (null != (line = stderr.readLine())))
{
if (false == isStringEmpty(line))
{
retString += line + "\n";
}
}
}
catch (Exception e)
{
e.printStackTrace();
}
return retString;
}
ps: 如果你在應用裡面執行 shell,是以應用的用戶來執行,如果是特殊的目錄,需要root許可權的,也就是先執行 su ,在執行你的命令
而,如果通過 adb 執行 shell 的話,上來就是一個終端用戶(或者 root) 所以可能上來就有很高的許可權
另外,看一下 /mnt/sdcard 是否有文件在去操作
㈤ 在VB中,如何調用命令行的命令
使用SHELL()
SHELL語句用法心得
一. 調用系統「創建快捷方式」向導
是否為VB不支持創建快捷方式而於著急呢?雖然 您可以調用vb5stkit.Dll中的fCreateShellLink函 數,但它是為安裝程序設計的,快捷方式的默認路徑 總是從當前用戶的「\Start Menu\Programs」開始,也 就是說,如果您的Windows95裝在C盤上,您無法通過 fCreateShellLink函數把快捷方式創建到D盤上去。
現在,給大家介紹一種極為方便、巧妙的方法: 用Shell語句調用系統「創建快捷方式」向導。
新建一個項目,在窗體上放一個按鈕,雙擊此按 鈕,加入以下代碼:
Private Sub Command1_Click()
Open App.Path & "\temp.lnk" For Output As #1
Close #1 '以上兩句在程序所在目錄建立一 個臨時文件
Shell "Rundll32.exe AppWiz.Cpl,NewLinkHere
"& App.Path & "\temp.lnk"
End Sub
(注意:Shell語句中NewLinkHere後面跟著一個 空格才是引號,否則將出錯。)
運行程序,按一下命令按鈕,怎麼樣?「創建快 捷方式」向導出現了,如果創建成功,快捷方式將取 代臨時文件temp.lnk的位置,如果選取消,temp.lnk 也會自動消失。當然,您可以在硬碟的任意位置建立 temp.lnk。好,現在又可以為您的程序增添一項新功 能了。Enjoy!
二. Rundll32.exe的用途
我們知道,用Shell語句只能調用可執行文件,即 exe、com、bat和pif文件,有時我們想要調用其他一 些系統功能該怎麼辦呢?此時,Windows提供的 Rundll32.exe可大顯身手了。下面我們來認識一下這 些用法,也許會給您帶來一點驚喜。
1.要打開設置系統時間的控制面板文件 (Timedate.cpl),只需運行如下代碼:
Shell "Rundll32.exe
Shell32.dll,Control_RunDLL Timedate.cpl"
至於打開其他控制面板文件,相信您一定能夠舉 一反三,嘗試一下,換個文件名就成了。
2.要運行某一快捷方式(*.lnk)則可以用以下 代碼:
She11 "Rundll32.exe url.dll, FileProtocolHandler X" (X代表要運行的文件,包括 路徑,下同。
3. 也可以這樣寫來打開ActiveMovie控制:
Shell "RUNDLL32.EXE amovie.ocx,Rundll",1
而用Shell "RUNDLL32.EXE amovie.ocx,Rundll /play X",1 將直接播放媒體文件。
4. Shell "rundll32.exe desk.cpl,InstallScreenSaver X」當然是安裝屏幕保 護啦,如果你寫了一個屏幕保護程序,那麼可以在安 裝程序中寫上它,而不一定要裝到system目錄下。順 便提一下,VB不是自撈一個「Application Setup Wizard」么?它的VB源代碼都在安裝目錄下的 「\setupkit\setup1」中放著呢,好好把它研究一下。 你完全能做出富有個性的安裝程序來。
5.按住shift鍵,右擊某一文件,菜單中會出現 「打開方式」選項,這也許已不是什麼秘密。但現在, 用shell "rundll32.exe shell32.dll OpenAs_RunDLL X" 便能直接調用「打開方式」框。
6. 甚至能用這樣一句來列印文件(包括HTML所 支持的所有文本與圖像格式):
Shell "rundll32.exe MSHTML.DLL,PrintHTML X」, 1
怎麼樣?是不是小有收獲呢?這下,您一定會對 Rundll32.exe這個平時不起眼的文件另眼相待了,它 可是系統運行必不可少的部件呢!其實 Shell+Rundll32還能調用其他許多系統功能,比如關 於NetMeeting和Telnet方面的。如果您有興趣,可以 到往冊表的「我的電腦\HKEY_CLASSES_ROOT\」或「我 的電腦\HKEY_LOCAL_MACHINE\Software\CLASSES」下 去看看,本文的內容大都是從那裡「抄」來的。只要 有足夠的決心、信心、耐心,您一定能發現更多有價 值的東西。Good luck!
㈥ 怎麼在linux中調用命令行中的命令,比如我想在一個程序中用命令行運行另一個程序
Linux編程中在命令行啟動另一個可執行文件或調用命令用system函數最簡單了,這個函數原理是在你編寫的那個程序的內部啟動另一個程序或命令,從而創建一個新進程,並等待這個進程執行完畢退出。如果正常執行,system函數將返回被執行程序或命令的退出碼;如果無法運行這個程序或命令,將返回錯誤代碼127;如果是其他錯誤,返回-1。這個函數的原型是:
#include <stdlib.h>
int system(const char *string);
參數string是將要執行的程序文件名或路徑,如果是啟動一個命令就是一個命令字元串。
還有一種執行外部程序的方法是exec系列函數,一般是在fork的子進程裡面調用exec系列函數,那主進程里直接調用exec系列不行嗎,為什麼要fork再在子進程里調用呢?因為exec系列的函數(包括execl函數)都是將當前進程替換成新進程,也就是說新進程啟動後原來的進程就不存在了,exec系列函數後面的那些代碼就不會再執行了。如果你不放在fork子進程裡面,那主進程在執行execl函數後就完全不存在了,所以exec系列函數的使用都是先fork然後在子進程裡面調用。因為exec系列函數都要使用fork調用,所以我一般是用system函數。
㈦ C#怎麼調用命令行
public static void ExeCommand()
{
Process p = new Process();
p.StartInfo.FileName = "cmd.exe";
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.CreateNoWindow = false;//true表示不顯示黑框,false表示顯示dos界面
string strOutput = null;
try
{
p.Start();
//要執行的dos命令 p.StandardInput.WriteLine("");
p.StandardInput.WriteLine("exit");
p.Close();
}
catch (Exception)
{
}
}
㈧ c語言如何調用命令行並且是以管理員身份運行的命令行
如果你的命令要求以管理員身份運行,那麼你自己的C語言程序也得是以管理員身份運行的,這可以通過在程序上點擊 右鍵 -》以管理員許可權運行 ,或者通過添加一個 manifest 文件的形式來提升許可權。參見 jingyan..com/article/f0e83a25c2e78a22e5910137.html 中的步驟1,以外置文件的形式來提升許可權。
㈨ js如何調用cmd命令
ActiveXObject是IE的東西, 你在node里要用child_process, 例如
var
spawn=require('child_process').spawn,
call=spawn('cmd.exe',['/c','echo','echosomething']);
call.stdout.on('data',function(Q){console.log(Q.toString())})
call.stderr.on('data',function(Q){console.log('error',Q.toString())})
call.on('exit',function(Code){console.log('Exited',Code)})
㈩ 在windows中如何調用控制台命令
點「開始—運行」,在「運行」對話框內輸入「cmd」(不含引號),在彈出的窗口中輸入你要執行的命令後回車即可。