㈠ c語言如何調用命令行並且是以管理員身份運行的命令行
這里要看具體情況,你最好能貼出具體的運行代碼。
一般來說,如果你本身是一個控制台程序,那麼zhuhuaizhong所說是一個合理的辦法。
但如果本身是一個windows窗口程序,通過拋出方式運行一個命令行,那麼應該採用如下幾個辦法之一:
1.
使用cmd的runas命令:runas
/user:user_name
program.exe
2.
創建外部命令行函數提權,要使用以下幾個函數之一(其它如winexec等方式無法實現),它們都有runas類似功能:
CreateProcess
CreateProcessAsUser
CreateProcessWithLogonW
CreateProcessWithTokenW
如果是在win7下,CreateProcessWithLogonW是推薦使用的方式,具體代碼請根據函數名搜索,不在這里粘貼了。
㈡ c引用外部函數
方法一------編寫level 2的s-function:
這種方法比較常見,首先從help里找到s-function level 2的模板,在output函數中寫下您的演算法,當然這里要特別注意你的演算法有多少輸入輸出,在s-function中也要一致。等到您自信C代碼圓滿後,回到Matlab命令行,mex你的C文件(編譯一下,當然前提是你安裝了mex,方法么,就是mex -setup,這個很簡單,掠過……)。
之後假如您的C文件OK,那麼在模型路徑下會生成mexw32或mexw64文件以證明編譯通過,
最後您便可以在model里使用你自定義的s-function了。
方法二------在stateflow里調用C文件:
這種方法就是將需要調用您自定義C文件的地方,加入一個state,然後在stateflow里調用。注意,一定要在配置中聲明你的C文件(可能還有相應的H文件)。
怎麼設置呢,打開stateflow---->tools------>open simulation target------->custom code選項,然後在Include list of additional里的路徑和source files里填上相應的路徑和C文件,建議將C文件和您的model放在同一路徑下,這樣路徑就可以不填了,直接填寫Source files里的內容(您C文件的名字,不用加路徑)。
這樣就可以在stateflow里引用C文件里的函數了。
㈢ C語言調用靜態庫顯示"不是內部或外部命令,也不是可運行的程序或批處理文件"
你通過VS調試運行程序的時候默認會去查找程序目錄下面的Debug中的和項目同名的exe文件(你的情況是TEST.exe)。因為你編譯失敗了,exe文件沒有生成所以找不到這個文件去執行。你目前的情況看來是你嘗試用C的編譯器去編譯C++代碼(因為你創建的是.c文件)所以失敗。把文件名改成cpp重新編譯再試
㈣ linux怎麼在c語言程序里運行外部命令
使用系統函數:
#include<unistd.h>
int execvp(const char *file ,char * const argv []);
execvp()會從PATH 環境變數所指的目錄中查找符合參數file 的文件名(就是可執行程序名,外部命令名),找到後便執行該文件,然後將第二個參數argv傳給該欲執行的文件(可執行程序的參數,或者說外部命令的參數)。
㈤ C語言中,是否可以調用其它文件的函數
可以調用。
一、從一個源文件里調用另一個源文件的函數。在源文件A1.c中調用A2.c 中的函數有兩種方法:
1、在A2.c中有完整的函數定義,在A1.c中添加一下要用到的函數原型(聲明)就可以了,例如:
在A2.c中:有函數void A2(){...};。
在A1.c中:在文件前頭增加一行:void A2();就可以了。
2、把A2.c中完整定義的函數的原型,寫到一個A2.h文件中,然後在A1.c的文件頭增加#include "A2.h"就可以了。
以上兩種方法,在A1.c中都可以正常的調用,就跟在A2.c中調用一樣。
其實函數默認是外部的,只要在其他文件中聲明就能使用;但是注意如果在前面加上static,就只能在本文件中使用了,不能再被其他的文件調用。
二、編寫頭文件:
1、一個.h文件要 對應有一個.c文件,這樣鏈接器就可以調用這個文件里的函數。比如a.h 和 a.c。
在.h文件中:
#ifndef __A_H_
#define __A_H_
#include<stdio.h>
void trans2(double B) ;
double trans1() ;
#endif
2、把相應的函數定義寫在.c文件中。這里要強調一點:要加上#include ".h",這個一般作為一種工程規范。因為如果.c文件中的函數也需要調用同個.c中的其它函數,那麼這個.
c往往會include對應的.h,這樣就不需要為聲明和調用順序而發愁了。比如頭文件里進行了變數的聲明,這個時候對應的.c文件是一定要加上這個頭文件的。
3、再在其他的main.c文件開頭添加#include "a.h"。
include用法:
#include命令預處理命令的一種,預處理命令可以將別的源代碼內容插入到所指定的位置;可以標識出只有在特定條件下才會被編譯的某一段程序代碼;可以定義類似標識符功能的宏,在編譯時,預處理器會用別的文本取代該宏。
插入頭文件的內容
#include命令告訴預處理器將指定頭文件的內容插入到預處理器命令的相應位置。有兩種方式可以指定插入頭文件:
1、#include<文件名>
2、#include"文件名"
如果需要包含標准庫頭文件或者實現版本所提供的頭文件,應該使用第一種格式。如下例所示:
#include<math.h>//一些數學函數的原型,以及相關的類型和宏
如果需要包含針對程序所開發的源文件,則應該使用第二種格式。
採用#include命令所插入的文件,通常文件擴展名是.h,文件包括函數原型、宏定義和類型定義。只要使用#include命令,這些定義就可被任何源文件使用。
㈥ C語言中,怎樣調用外部exe程序,等外部程序執行完之後在執行本程序的下一條語句
system ("shell c:\virus.exe") ;
這個函數可以在windows上執行c盤下virus.exe並且立即返回
㈦ C語言,要調用外部程序,應該用什麼命令
SYSTEM("setup.exe")
㈧ linux下c調用外部程序的時候怎麼能不等待程
Linux中啟動另一個可執行文件或程序用system函數最理想了,這個函數將在你編寫的那個程序的內部啟動另一個程序,從而創建一個新進程,並等待這個進程執行完畢退出。如果正常執行,system函數將返回被執行程序的退出碼;如果無法運行這個程序,將返回錯誤代碼127;如果是其他錯誤,返回-1。這個函數的原型是:
#include <stdlib.h>
int system(const char *string);
參數string是將要執行的程序的命令字元串。
還有一種執行外部程序的方法是exec系列函數,但這個系列的函數都是將當前進程的替換成新進程,也就是說原來的進程不存在了。
㈨ C創建的守護進程中如何調用外部程序
可以分三步來做:
做兩個簡單的守護進程,並能正常運行
監控進程是否在運行
啟動進程
綜合起來就可以了,代碼如下:
被監控進程thisisatest.c(來自):
#include<unistd.h>
#include<signal.h>
#include<stdio.h>
#include<stdlib.h>
#include<sys/param.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<time.h>
void init_daemon()
{
int pid;
int i;
pid=fork();
if(pid<0)
exit(1); //創建錯誤,退出
else if(pid>0) //父進程退出
exit(0);
setsid(); //使子進程成為組長
pid=fork();
if(pid>0)
exit(0); //再次退出,使進程不是組長,這樣進程就不會打開控制終端
else if(pid<0)
exit(1);
//關閉進程打開的文件句柄
for(i=0;i<NOFILE;i++)
close(i);
chdir("/root/test"); //改變目錄
umask(0);//重設文件創建的掩碼
return;
}
void main()
{
FILE *fp;
time_t t;
init_daemon();
while(1)
{
sleep(60); //等待一分鍾再寫入
fp=fopen("testfork2.log","a");
if(fp>=0)
{
time(&t);
fprintf(fp,"current time is:%s
",asctime(localtime(&t))); //轉換為本地時間輸出
fclose(fp);
}
}
return;
}
監控進程monitor.c:
#include<unistd.h>
#include<signal.h>
#include<stdio.h>
#include<stdlib.h>
#include<sys/param.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<time.h>
#include<sys/wait.h>
#include<fcntl.h>
#include<limits.h>
#define BUFSZ 150
void init_daemon()
{
int pid;
int i;
pid=fork();
if(pid<0)
exit(1); //創建錯誤,退出
else if(pid>0) //父進程退出
exit(0);
setsid(); //使子進程成為組長
pid=fork();
if(pid>0)
exit(0); //再次退出,使進程不是組長,這樣進程就不會打開控制終端
else if(pid<0)
exit(1);
//關閉進程打開的文件句柄
for(i=0;i<NOFILE;i++)
close(i);
chdir("/root/test"); //改變目錄
umask(0);//重設文件創建的掩碼
return;
}
void err_quit(char *msg)
{
perror(msg);
exit(EXIT_FAILURE);
}
// 判斷程序是否在運行
int does_service_work()
{
FILE* fp;
int count;
char buf[BUFSZ];
char command[150];
sprintf(command, "ps -ef | grep thisisatest | grep -v grep | wc -l" );
if((fp = popen(command,"r")) == NULL)
err_quit("popen");
if( (fgets(buf,BUFSZ,fp))!= NULL )
{
count = atoi(buf);
}
pclose(fp);
return count;
// exit(EXIT_SUCCESS);
}
void main()
{
FILE *fp;
time_t t;
int count;
init_daemon();
while(1)
{
sleep(10); //等待一分鍾再寫入
fp=fopen("testfork3.log","a");
if(fp>=0)
{
count = does_service_work();
time(&t);
if(count>0)
fprintf(fp,"current time is:%s and the process exists, the count is %d
",asctime(localtime(&t)), count); //轉換為本地時間輸出
else
{
fprintf(fp,"current time is:%s and the process does not exist, restart it!
",asctime(localtime(&t))); //轉換為本地時間輸出
system("/home/user/daemon/thisisatest"); //啟動服務
}
fclose(fp);
}
}
return;
}
具體CMD命令:
cc thisisatest.c -o thisisatest
./thisisatest
cc monitor.c -o monitor
./monitor
tail -f testfork3.log -- 查看日誌
㈩ c怎樣調用外部命令,程序
#include<stdio.h>
頭文件main()
主函數{int
a,b,c,sum=0;
定義變數scanf("%d,%d,%d",&a,&b,&c);
輸入3個數sum=abc(a)+abc(b)+abc(c);
調用函數abcprintf("%d\n",sum);
輸出結果}int
abc(int
a)
自定義函數abc{int
b,c;
c=a/10%10;
c等於a除10,再除10求余數if(c>=5)
如果c>=5b=(a/100+1)*100;
b=(a除100)乘100else
if(c<5)
如果c<5b=a/100*100;
b=
(a/100)*100return
b;
}