當前位置:首頁 » 編程語言 » c語言exec

c語言exec

發布時間: 2022-12-16 11:13:08

『壹』 c語言到底有多少種函數

分類函數,所在函數庫為ctype.h

int isalpha(int ch) 若ch是字母('A'-'Z','a'-'z')返回非0值,否則返回0
int isalnum(int ch) 若ch是字母('A'-'Z','a'-'z')或數字('0'-'9')
返回非0值,否則返回0
int isascii(int ch) 若ch是字元(ASCII碼中的0-127)返回非0值,否則返回0
int iscntrl(int ch) 若ch是作廢字元(0x7F)或普通控制字元(0x00-0x1F)
返回非0值,否則返回0
int isdigit(int ch) 若ch是數字('0'-'9')返回非0值,否則返回0
int isgraph(int ch) 若ch是可列印字元(不含空格)(0x21-0x7E)返回非0值,否則返回0
int islower(int ch) 若ch是小寫字母('a'-'z')返回非0值,否則返回0
int isprint(int ch) 若ch是可列印字元(含空格)(0x20-0x7E)返回非0值,否則返回0
int ispunct(int ch) 若ch是標點字元(0x00-0x1F)返回非0值,否則返回0
int isspace(int ch) 若ch是空格(' '),水平製表符('\t'),回車符('\r'),
走紙換行('\f'),垂直製表符('\v'),換行符('\n')
返回非0值,否則返回0
int isupper(int ch) 若ch是大寫字母('A'-'Z')返回非0值,否則返回0
int isxdigit(int ch) 若ch是16進制數('0'-'9','A'-'F','a'-'f')返回非0值,
否則返回0
int tolower(int ch) 若ch是大寫字母('A'-'Z')返回相應的小寫字母('a'-'z')
int toupper(int ch) 若ch是小寫字母('a'-'z')返回相應的大寫字母('A'-'Z')
int abs(int i) 返回整型參數i的絕對值
double cabs(struct complex znum) 返回復數znum的絕對值
double fabs(double x) 返回雙精度參數x的絕對值
long labs(long n) 返回長整型參數n的絕對值
double exp(double x) 返回指數函數ex的值
double frexp(double value,int *eptr) 返回value=x*2n中x的值,n存貯在eptr中
double ldexp(double value,int exp); 返回value*2exp的值
double log(double x) 返回logex的值
double log10(double x) 返回log10x的值
double pow(double x,double y) 返回xy的值
double pow10(int p) 返回10p的值
double sqrt(double x) 返回x的開方
double acos(double x) 返回x的反餘弦cos-1(x)值,x為弧度
double asin(double x) 返回x的反正弦sin-1(x)值,x為弧度
double atan(double x) 返回x的反正切tan-1(x)值,x為弧度
double atan2(double y,double x) 返回y/x的反正切tan-1(x)值,y的x為弧度
double cos(double x) 返回x的餘弦cos(x)值,x為弧度
double sin(double x) 返回x的正弦sin(x)值,x為弧度
double tan(double x) 返回x的正切tan(x)值,x為弧度
double cosh(double x) 返回x的雙曲餘弦cosh(x)值,x為弧度
double sinh(double x) 返回x的雙曲正弦sinh(x)值,x為弧度
double tanh(double x) 返回x的雙曲正切tanh(x)值,x為弧度
double hypot(double x,double y) 返回直角三角形斜邊的長度(z),
x和y為直角邊的長度,z2=x2+y2
double ceil(double x) 返回不小於x的最小整數
double floor(double x) 返回不大於x的最大整數
void srand(unsigned seed) 初始化隨機數發生器
int rand() 產生一個隨機數並返回這個數
double poly(double x,int n,double c[])從參數產生一個多項式
double modf(double value,double *iptr)將雙精度數value分解成尾數和階
double fmod(double x,double y) 返回x/y的余數
double frexp(double value,int *eptr) 將雙精度數value分成尾數和階
double atof(char *nptr) 將字元串nptr轉換成浮點數並返回這個浮點數
double atoi(char *nptr) 將字元串nptr轉換成整數並返回這個整數
double atol(char *nptr) 將字元串nptr轉換成長整數並返回這個整數
char *ecvt(double value,int ndigit,int *decpt,int *sign)
將浮點數value轉換成字元串並返回該字元串
char *fcvt(double value,int ndigit,int *decpt,int *sign)
將浮點數value轉換成字元串並返回該字元串
char *gcvt(double value,int ndigit,char *buf)
將數value轉換成字元串並存於buf中,並返回buf的指針
char *ultoa(unsigned long value,char *string,int radix)
將無符號整型數value轉換成字元串並返回該字元串,radix為轉換時所用基數
char *ltoa(long value,char *string,int radix)
將長整型數value轉換成字元串並返回該字元串,radix為轉換時所用基數
char *itoa(int value,char *string,int radix)
將整數value轉換成字元串存入string,radix為轉換時所用基數
double atof(char *nptr) 將字元串nptr轉換成雙精度數,並返回這個數,錯誤返回0
int atoi(char *nptr) 將字元串nptr轉換成整型數, 並返回這個數,錯誤返回0
long atol(char *nptr) 將字元串nptr轉換成長整型數,並返回這個數,錯誤返回0
double strtod(char *str,char **endptr)將字元串str轉換成雙精度數,並返回這個數,
long strtol(char *str,char **endptr,int base)將字元串str轉換成長整型數,
並返回這個數,
int matherr(struct exception *e)
用戶修改數學錯誤返回信息函數(沒有必要使用)
double _matherr(_mexcep why,char *fun,double *arg1p,
double *arg2p,double retval)
用戶修改數學錯誤返回信息函數(沒有必要使用)
unsigned int _clear87() 清除浮點狀態字並返回原來的浮點狀態
void _fpreset() 重新初使化浮點數學程序包
unsigned int _status87() 返回浮點狀態字
int chdir(char *path) 使指定的目錄path(如:"C:\\WPS")變成當前的工作目錄,成
功返回0
int findfirst(char *pathname,struct ffblk *ffblk,int attrib)查找指定的文件,成功
返回0
pathname為指定的目錄名和文件名,如"C:\\WPS\\TXT"
ffblk為指定的保存文件信息的一個結構,定義如下:
┏━━━━━━━━━━━━━━━━━━┓
┃struct ffblk ┃
┃{ ┃
┃ char ff_reserved[21]; /*DOS保留字*/┃
┃ char ff_attrib; /*文件屬性*/ ┃
┃ int ff_ftime; /*文件時間*/ ┃
┃ int ff_fdate; /*文件日期*/ ┃
┃ long ff_fsize; /*文件長度*/ ┃
┃ char ff_name[13]; /*文件名*/ ┃
┃} ┃
┗━━━━━━━━━━━━━━━━━━┛
attrib為文件屬性,由以下字元代表
┏━━━━━━━━━┳━━━━━━━━┓
┃FA_RDONLY 只讀文件┃FA_LABEL 卷標號┃
┃FA_HIDDEN 隱藏文件┃FA_DIREC 目錄 ┃
┃FA_SYSTEM 系統文件┃FA_ARCH 檔案 ┃
┗━━━━━━━━━┻━━━━━━━━┛
例:
struct ffblk ff;
findfirst("*.wps",&ff,FA_RDONLY);
int findnext(struct ffblk *ffblk) 取匹配finddirst的文件,成功返回0
void fumerge(char *path,char *drive,char *dir,char *name,char *ext)
此函數通過盤符drive(C:、A:等),路徑dir(\TC、\BC\LIB等),
文件名name(TC、WPS等),擴展名ext(.EXE、.COM等)組成一個文件名
存與path中.
int fnsplit(char *path,char *drive,char *dir,char *name,char *ext)
此函數將文件名path分解成盤符drive(C:、A:等),路徑dir(\TC、\BC\LIB等),
文件名name(TC、WPS等),擴展名ext(.EXE、.COM等),並分別存入相應的變數中.
int getcurdir(int drive,char *direc) 此函數返回指定驅動器的當前工作目錄名稱
drive 指定的驅動器(0=當前,1=A,2=B,3=C等)
direc 保存指定驅動器當前工作路徑的變數 成功返回0
char *getcwd(char *buf,iint n) 此函數取當前工作目錄並存入buf中,直到n個字
節長為為止.錯誤返回NULL
int getdisk() 取當前正在使用的驅動器,返回一個整數(0=A,1=B,2=C等)
int setdisk(int drive) 設置要使用的驅動器drive(0=A,1=B,2=C等),
返回可使用驅動器總數
int mkdir(char *pathname) 建立一個新的目錄pathname,成功返回0
int rmdir(char *pathname) 刪除一個目錄pathname,成功返回0
char *mktemp(char *template) 構造一個當前目錄上沒有的文件名並存於template中
char *searchpath(char *pathname) 利用MSDOS找出文件filename所在路徑,
,此函數使用DOS的PATH變數,未找到文件返回NULL
void abort() 此函數通過調用具有出口代碼3的_exit寫一個終止信息於stderr,
並異常終止程序。無返回值
int exec…裝入和運行其它程序
int execl( char *pathname,char *arg0,char *arg1,…,char *argn,NULL)
int execle( char *pathname,char *arg0,char *arg1,…,
char *argn,NULL,char *envp[])
int execlp( char *pathname,char *arg0,char *arg1,…,NULL)
int execlpe(char *pathname,char *arg0,char *arg1,…,NULL,char *envp[])
int execv( char *pathname,char *argv[])
int execve( char *pathname,char *argv[],char *envp[])
int execvp( char *pathname,char *argv[])
int execvpe(char *pathname,char *argv[],char *envp[])
exec函數族裝入並運行程序pathname,並將參數
arg0(arg1,arg2,argv[],envp[])傳遞給子程序,出錯返回-1
在exec函數族中,後綴l、v、p、e添加到exec後,
所指定的函數將具有某種操作能力
有後綴 p時,函數可以利用DOS的PATH變數查找子程序文件。
l時,函數中被傳遞的參數個數固定。
v時,函數中被傳遞的參數個數不固定。
e時,函數傳遞指定參數envp,允許改變子進程的環境,
無後綴e時,子進程使用當前程序的環境。
void _exit(int status)終止當前程序,但不清理現場
void exit(int status) 終止當前程序,關閉所有文件,寫緩沖區的輸出(等待輸出),
並調用任何寄存器的"出口函數",無返回值
int spawn…運行子程序
int spawnl( int mode,char *pathname,char *arg0,char *arg1,…,
char *argn,NULL)
int spawnle( int mode,char *pathname,char *arg0,char *arg1,…,
char *argn,NULL,char *envp[])
int spawnlp( int mode,char *pathname,char *arg0,char *arg1,…,
char *argn,NULL)
int spawnlpe(int mode,char *pathname,char *arg0,char *arg1,…,
char *argn,NULL,char *envp[])
int spawnv( int mode,char *pathname,char *argv[])
int spawnve( int mode,char *pathname,char *argv[],char *envp[])
int spawnvp( int mode,char *pathname,char *argv[])

int spawnvpe(int mode,char *pathname,char *argv[],char *envp[])
spawn函數族在mode模式下運行子程序pathname,並將參數
arg0(arg1,arg2,argv[],envp[])傳遞給子程序.出錯返回-1
mode為運行模式
mode為 P_WAIT 表示在子程序運行完後返回本程序
P_NOWAIT 表示在子程序運行時同時運行本程序(不可用)
P_OVERLAY表示在本程序退出後運行子程序
在spawn函數族中,後綴l、v、p、e添加到spawn後,
所指定的函數將具有某種操作能力
有後綴 p時, 函數利用DOS的PATH查找子程序文件
l時, 函數傳遞的參數個數固定.
v時, 函數傳遞的參數個數不固定.
e時, 指定參數envp可以傳遞給子程序,允許改變子程序運行環境.
當無後綴e時,子程序使用本程序的環境.
int system(char *command) 將MSDOS命令command傳遞給DOS執行
char *ecvt(double value,int ndigit,int *decpt,int *sign)
將浮點數value轉換成字元串並返回該字元串
char *fcvt(double value,int ndigit,int *decpt,int *sign)
將浮點數value轉換成字元串並返回該字元串
char *gcvt(double value,int ndigit,char *buf)
將數value轉換成字元串並存於buf中,並返回buf的指針
char *ultoa(unsigned long value,char *string,int radix)
將無符號整型數value轉換成字元串並返回該字元串,radix為轉換時所用基數
char *ltoa(long value,char *string,int radix)
將長整型數value轉換成字元串並返回該字元串,radix為轉換時所用基數
char *itoa(int value,char *string,int radix)
將整數value轉換成字元串存入string,radix為轉換時所用基數
double atof(char *nptr) 將字元串nptr轉換成雙精度數,並返回這個數,錯誤返回0
int atoi(char *nptr) 將字元串nptr轉換成整型數, 並返回這個數,錯誤返回0
long atol(char *nptr) 將字元串nptr轉換成長整型數,並返回這個數,錯誤返回0
double strtod(char *str,char **endptr)將字元串str轉換成雙精度數,並返回這個數,
long strtol(char *str,char **endptr,int base)將字元串str轉換成長整型數,
並返回這個數,
int toascii(int c) 返回c相應的ASCII
int tolower(int ch) 若ch是大寫字母('A'-'Z')返回相應的小寫字母('a'-'z')
int _tolower(int ch) 返回ch相應的小寫字母('a'-'z')
int toupper(int ch) 若ch是小寫字母('a'-'z')返回相應的大寫字母('A'-'Z')
int _toupper(int ch) 返回ch相應的大寫字母('A'-'Z')
void assert(int test) 一個擴展成if語句那樣的宏,如果test測試失敗,
就顯示一個信息並異常終止程序,無返回值
void perror(char *string) 本函數將顯示最近一次的錯誤信息,格式如下:
字元串string:錯誤信息
char *strerror(char *str) 本函數返回最近一次的錯誤信息,格式如下:
字元串str:錯誤信息
int matherr(struct exception *e)
用戶修改數學錯誤返回信息函數(沒有必要使用)
double _matherr(_mexcep why,char *fun,double *arg1p,
double *arg2p,double retval)
用戶修改數學錯誤返回信息函數(沒有必要使用)
int kbhit() 本函數返回最近所敲的按鍵
int fgetchar() 從控制台(鍵盤)讀一個字元,顯示在屏幕上
int getch() 從控制台(鍵盤)讀一個字元,不顯示在屏幕上
int putch() 向控制台(鍵盤)寫一個字元
int getchar() 從控制台(鍵盤)讀一個字元,顯示在屏幕上
int putchar() 向控制台(鍵盤)寫一個字元
int getche() 從控制台(鍵盤)讀一個字元,顯示在屏幕上
int ungetch(int c) 把字元c退回給控制台(鍵盤)
char *cgets(char *string) 從控制台(鍵盤)讀入字元串存於string中
int scanf(char *format[,argument…])從控制台讀入一個字元串,分別對各個參數進行
賦值,使用BIOS進行輸出
int vscanf(char *format,Valist param)從控制台讀入一個字元串,分別對各個參數進行
賦值,使用BIOS進行輸出,參數從Valist param中取得
int cscanf(char *format[,argument…])從控制台讀入一個字元串,分別對各個參數進行
賦值,直接對控制台作操作,比如顯示器在顯示時字元時即為直接寫頻方式顯示
int sscanf(char *string,char *format[,argument,…])通過字元串string,分別對各個
參數進行賦值
int vsscanf(char *string,char *format,Vlist param)通過字元串string,分別對各個
參數進行賦值,參數從Vlist param中取得
int puts(char *string) 發關一個字元串string給控制台(顯示器),
使用BIOS進行輸出
void cputs(char *string) 發送一個字元串string給控制台(顯示器),
直接對控制台作操作,比如顯示器即為直接寫頻方式顯示
int printf(char *format[,argument,…]) 發送格式化字元串輸出給控制台(顯示器)
使用BIOS進行輸出
int vprintf(char *format,Valist param) 發送格式化字元串輸出給控制台(顯示器)
使用BIOS進行輸出,參數從Valist param中取得
int cprintf(char *format[,argument,…]) 發送格式化字元串輸出給控制台(顯示器),
直接對控制台作操作,比如顯示器即為直接寫頻方式顯示
int vcprintf(char *format,Valist param)發送格式化字元串輸出給控制台(顯示器),
直接對控制台作操作,比如顯示器即為直接寫頻方式顯示,
參數從Valist param中取得
int sprintf(char *string,char *format[,argument,…])
將字元串string的內容重新寫為格式化後的字元串
int vsprintf(char *string,char *format,Valist param)
將字元串string的內容重新寫為格式化後的字元串,參數從Valist param中取得
int rename(char *oldname,char *newname)將文件oldname的名稱改為newname
int ioctl(int handle,int cmd[,int *argdx,int argcx])
本函數是用來控制輸入/輸出設備的,請見下表:
┌———┬————————————————————————————┐
│cmd值 │功能 │
├———┼————————————————————————————┤
│ 0 │取出設備信息 │
│ 1 │設置設備信息 │
│ 2 │把argcx位元組讀入由argdx所指的地址 │
│ 3 │在argdx所指的地址寫argcx位元組 │
│ 4 │除把handle當作設備號(0=當前,1=A,等)之外,均和cmd=2時一樣 │
│ 5 │除把handle當作設備號(0=當前,1=A,等)之外,均和cmd=3時一樣 │
│ 6 │取輸入狀態 │
│ 7 │取輸出狀態 │
│ 8 │測試可換性;只對於DOS 3.x │
│ 11 │置分享沖突的重算計數;只對DOS 3.x │
└———┴————————————————————————————┘
int (*ssignal(int sig,int(*action)())()執行軟體信號(沒必要使用)
int gsignal(int sig) 執行軟體信號(沒必要使用)
int _open(char *pathname,int access)為讀或寫打開一個文件,
按後按access來確定是讀文件還是寫文件,access值見下表
┌——————┬————————————————————┐
│access值 │意義 │
├——————┼————————————————————┤
│O_RDONLY │讀文件 │
│O_WRONLY │寫文件 │
│O_RDWR │即讀也寫 │
│O_NOINHERIT │若文件沒有傳遞給子程序,則被包含 │
│O_DENYALL │只允許當前處理必須存取的文件 │
│O_DENYWRITE │只允許從任何其它打開的文件讀 │
│O_DENYREAD │只允許從任何其它打開的文件寫 │
│O_DENYNONE │允許其它共享打開的文件 │
└——————┴————————————————————┘
int open(char *pathname,int access[,int permiss])為讀或寫打開一個文件,
按後按access來確定是讀文件還是寫文件,access值見下表
┌————┬————————————————————┐
│access值│意義 │
├————┼————————————————————┤
│O_RDONLY│讀文件 │
│O_WRONLY│寫文件 │
│O_RDWR │即讀也寫 │
│O_NDELAY│沒有使用;對UNIX系統兼容 │
│O_APPEND│即讀也寫,但每次寫總是在文件尾添加 │
│O_CREAT │若文件存在,此標志無用;若不存在,建新文件 │
│O_TRUNC │若文件存在,則長度被截為0,屬性不變 │
│O_EXCL │未用;對UNIX系統兼容 │
│O_BINARY│此標志可顯示地給出以二進制方式打開文件 │
│O_TEXT │此標志可用於顯示地給出以文本方式打開文件│
└————┴————————————————————┘
permiss為文件屬性,可為以下值:
S_IWRITE允許寫 S_IREAD允許讀 S_IREAD|S_IWRITE允許讀、寫
int creat(char *filename,int permiss) 建立一個新文件filename,並設定
讀寫性。permiss為文件讀寫性,可以為以下值
S_IWRITE允許寫 S_IREAD允許讀 S_IREAD|S_IWRITE允許讀、寫
int _creat(char *filename,int attrib) 建立一個新文件filename,並設定文件
屬性。attrib為文件屬性,可以為以下值
FA_RDONLY只讀 FA_HIDDEN隱藏 FA_SYSTEM系統
int creatnew(char *filenamt,int attrib) 建立一個新文件filename,並設定文件
屬性。attrib為文件屬性,可以為以下值
FA_RDONLY只讀 FA_HIDDEN隱藏 FA_SYSTEM系統
int creattemp(char *filenamt,int attrib) 建立一個新文件filename,並設定文件
屬性。attrib為文件屬性,可以為以下值
FA_RDONLY只讀 FA_HIDDEN隱藏 FA_SYSTEM系統
int read(int handle,void *buf,int nbyte)從文件號為handle的文件中讀nbyte個字元
存入buf中
int _read(int handle,void *buf,int nbyte)從文件號為handle的文件中讀nbyte個字元
存入buf中,直接調用MSDOS進行操作.
int write(int handle,void *buf,int nbyte)將buf中的nbyte個字元寫入文件號
為handle的文件中
int _write(int handle,void *buf,int nbyte)將buf中的nbyte個字元寫入文件號
為handle的文件中
int p(int handle) 復制一個文件處理指針handle,返回這個指針
int p2(int handle,int newhandle) 復制一個文件處理指針handle到newhandle
int eof(int *handle)檢查文件是否結束,結束返回1,否則返回0
long filelength(int handle) 返迴文件長度,handle為文件號
int setmode(int handle,unsigned mode)本函數用來設定文件號為handle的文件的打
開方式
int getftime(int handle,struct ftime *ftime) 讀取文件號為handle的文件的時間,
並將文件時間存於ftime結構中,成功返回0,ftime結構如下:
┌—————————————————┐
│struct ftime │
│{ │
│ unsigned ft_tsec:5; /*秒*/ │
│ unsigned ft_min:6; /*分*/ │
│ unsigned ft_hour:5; /*時*/ │
│ unsigned ft_day:5; /*日*/ │
│ unsigned ft_month:4;/*月*/ │
│ unsigned ft_year:1; /*年-1980*/ │
│} │
└—————————————————┘
int setftime(int handle,struct ftime *ftime) 重寫文件號為handle的文件時間,
新時間在結構ftime中.成功返回0.結構ftime如下:
┌—————————————————┐
│struct ftime │
│{ │
│ unsigned ft_tsec:5; /*秒*/ │
│ unsigned ft_min:6; /*分*/ │
│ unsigned ft_hour:5; /*時*/ │
│ unsigned ft_day:5; /*日*/ │
│ unsigned ft_month:4;/*月*/ │
│ unsigned ft_year:1; /*年-1980*/ │
│} │
└—————————————————┘
long lseek(int handle,long offset,int fromwhere) 本函數將文件號為handle的文件
的指針移到fromwhere後的第offset個位元組處.
SEEK_SET 文件開關 SEEK_CUR 當前位置 SEEK_END 文件尾
long tell(int handle) 本函數返迴文件號為handle的文件指針,以位元組表示
int isatty(int handle)本函數用來取設備handle的類型
int lock(int handle,long offset,long length) 對文件共享作封鎖
int unlock(int handle,long offset,long length) 打開對文件共享的封鎖
int close(int handle) 關閉handle所表示的文件處理,handle是從_creat、creat、
creatnew、creattemp、p、p2、_open、open中的一個處調用獲得的文件處理
成功返回0否則返回-1,可用於UNIX系統
int _close(int handle) 關閉handle所表示的文件

『貳』 C語言exec...()函數

函數名: exec...
功 能: 裝入並運行其它程序的函數
用 法: int execl(char *pathname, char *arg0, arg1, ..., argn, NULL);
int execle(char *pathname, char *arg0, arg1, ..., argn, NULL,
char *envp[]);
int execlp(char *pathname, char *arg0, arg1, .., NULL);
int execple(char *pathname, char *arg0, arg1, ..., NULL,
char *envp[]);
int execv(char *pathname, char *argv[]);
int execve(char *pathname, char *argv[], char *envp[]);
int execvp(char *pathname, char *argv[]);
int execvpe(char *pathname, char *argv[], char *envp[]);
程序例:/* execv example */
#include <process.h>
#include <stdio.h>
#include <errno.h>void main(int argc, char *argv[])
{
int i; printf("Command line arguments:\n");
for (i=0; i<argc; i++)
printf("[%2d] : %s\n", i, argv[i]); printf("About to exec child with arg1 arg2 ...\n");
execv("CHILD.EXE", argv); perror("exec error"); exit(1);
}

『叄』 為什麼C語言用execl執行bash shell腳本會出現Exec format error

進行linux測試編寫腳本必少Shell腳本名稱隨便定義要綴名例寫abcsmartzip類名稱運行要鍵入./smartzip能運行腳本每行命令處用空格行第1部.Linux腳本編寫基礎1.1語基本介紹1.1.1程序必須面行始(必須文件第行):#!/bin/sh符號#!用告訴系統面參數用執行該文件程序例我使用/bin/sh執行程序編輯腳本要執行該腳本必須使其執行要使腳本執行:編譯chmod+xfilename才能用./filename運行1.1.2注釋進行shell編程#句表示注釋直行結束我真誠建議您程序使用注釋您使用注釋即使相間內沒使用該腳本您能短間內明白該腳本作用及工作原理1.1.3變數其編程語言您必須使用變數shell編程所變數都由字元串組並且您需要變數進行聲明要賦值給變數您寫:#!/bin/sh#變數賦值:a="helloworld"#現列印變數a內容:echo"Ais:"echo$a候變數名容易與其文字混淆比:num=2echo"thisisthe$numnd"並列印"thisisthe2nd"僅僅列印"thisisthe"shell搜索變數numnd值變數沒值使用花括弧告訴shell我要列印num變數:num=2echo"thisisthe${num}nd"列印:thisisthe2nd1.1.4環境變數由export關鍵字處理變數叫做環境變數我環境變數進行討論通情況僅僅登錄腳本使用環境變數1.1.5Shell命令流程式控制制shell腳本使用三類命令:1)Unix命令:雖shell腳本使用任意unix命令由些相更用命令些命令通用進行文件文字操作用命令語及功能echo"sometext":文字內容列印屏幕ls:文件列表wc–lfile:計算文件行數wc-wfile:計算文件單詞數wc-cfile:計算文件字元數cpsourcefiledestfile:文件拷貝mvoldnamenewname:重命名文件或移文件rmfile:刪除文件grep'pattern'file:文件內搜索字元串比:grep'searchstring'file.txtcut-bcolnumfile:指定欲顯示文件內容範圍並輸標准輸設備比:輸每行第5第9字元cut-b5-9file.txt千萬要cat命令混淆兩完全同命令catfile.txt:輸文件內容標准輸設備(屏幕)filesomefile:文件類型readvar:提示用戶輸入並輸入賦值給變數sortfile.txt:file.txt文件行進行排序uniq:刪除文本文件現行列比:sortfile.txt|uniqexpr:進行數運算Example:add2and3expr2"+"3find:搜索文件比:根據文件名搜索find.-namefilename-printtee:數據輸標准輸設備(屏幕)文件比:somecommand|teeoutfilebasenamefile:返包含路徑文件名比:basename/bin/tux返tuxdirnamefile:返文件所路徑比:dirname/bin/tux返/binheadfile:列印文本文件幾行tailfile:列印文本文件末尾幾行sed:Sed基本查找替換程序標准輸入(比命令管道)讀入文本並結輸標准輸(屏幕)該命令採用則表達式(見參考)進行搜索要shell通配符相混淆比:linuxfocus替換LinuxFocus:cattext.file|sed's/linuxfocus/LinuxFocus/'>newtext.fileawk:awk用文本文件提取欄位預設欄位割符空格使用-F指定其割符catfile.txt|awk-F,'{print$1","$3}'我使用作欄位割符同列印第第三欄位該文件內容:AdamBor,34,IndiaKerryMiller,22,USA命令輸結:AdamBor,IndiaKerryMiller,USA2)概念:管道,重定向backtick些系統命令真重要管道(|)命令輸作另外命令輸入grep"hello"file.txt|wc-lfile.txt搜索包含hello行並計算其行數grep命令輸作wc命令輸入您使用命令重定向:命令結輸文件標准輸(屏幕)>寫入文件並覆蓋舊文件>>加文件尾部保留舊文件內容反短斜線使用反短斜線命令輸作另外命令命令行參數命令:find.-mtime-1-typef-print用查找24(-mtime–2則表示48)內修改文件您想所查找文件打包則使用腳本:#!/bin/sh#Theticksarebackticks(`)notnormalquotes('):tar-zcvflastmod.tar.gz`find.-mtime-1-typef-print`3)流程式控制制1.if"if"表達式條件真則執行then面部:if.;then.elif.;then.else.fi數情況使用測試命令條件進行測試比比較字元串、判斷文件否存及否讀等等…通用"[]"表示條件測試注意空格重要要確保括弧空格[-f"somefile"]:判斷否文件[-x"/bin/ls"]:判斷/bin/ls否存並執行許可權[-n"$var"]:判斷$var變數否值["$a"="$b"]:判斷$a$b否相等執行mantest查看所測試表達式比較判斷類型直接執行腳本:#!/bin/shif["$SHELL"="/bin/bash"];thenecho"yourloginshellisthebash(bourneagainshell)"elseecho"yourloginshellisnotbashbut$SHELL"fi變數$SHELL包含登錄shell名稱我/bin/bash進行比較快捷操作符熟悉C語言朋友能喜歡面表達式:[-f"/etc/shadow"]&&echo""&&快捷操作符左邊表達式真則執行右邊語句您認邏輯運算與操作例表示/etc/shadow文件存則列印同或操作(||)shell編程用例:#!/bin/shmailfolder=/var/spool/mail/james[-r"$mailfolder"]''{echo"Cannotread$mailfolder";exit1;}echo"$mailfolderhasmailfrom:"grep"^From"$mailfolder該腳本首先判斷mailfolder否讀讀則列印該文件"From"行讀則或操作效列印錯誤信息腳本退問題我必須兩命令:-列印錯誤信息-退程序我使用花括弧匿名函數形式兩命令放起作命令使用般函數文提及用與或操作符我用if表達式作任何事情使用與或操作符更便利2.casecase:表達式用匹配給定字元串數字casein)dosomethinghere;;esac讓我看例file命令辨別給定文件文件類型比:filelf.gz返:lf.gz:gzipcompresseddata,deflated,originalfilename,lastmodified:MonAug2723:09:182001,os:Unix我利用點寫叫做smartzip腳本該腳本自解壓bzip2,gzipzip類型壓縮文件:#!/bin/shftype=`file"$1"`case"$ftype"in"$1:Ziparchive"*)unzip"$1";;"$1:gzipcompressed"*)gunzip"$1";;"$1:bzip2compressed"*)bunzip2"$1";;*)echo"File$";;esac您能注意我使用特殊變數$1該變數包含傳遞給該程序第參數值說我運行:smartziparticles.zip$1字元串articles.zip3.selsectselect表達式種bash擴展應用尤其擅於互動式使用用戶組同值進行選擇selectvarin;dobreakdone.now$varcanbeused.面例:#!/bin/shecho"WhatisyourfavouriteOS?"selectvarin"Linux""GnuHurd""FreeBSD""Other";dobreakdoneecho"Youhaveselected$var"面該腳本運行結:WhatisyourfavouriteOS?1)Linux2)GnuHurd3)FreeBSD4)Other#?1YouhaveselectedLinux4.looploop表達式:while;do.donewhile-loop運行直表達式測試真.關鍵字"break"用跳循環關鍵字continue用執行余部直接跳循環for-loop表達式查看字元串列表(字元串用空格隔)其賦給變數:forvarin.;do.done面例別列印ABC屏幕:#!/bin/shforvarinABC;doecho"varis$var"done面更用腳本showrpm其功能列印些RPM包統計信息:#!/bin/sh##USAGE:showrpmrpmfile1rpmfile2#EXAMPLE:showrpm/cdrom/RedHat/RPMS/*.rpmforrpmpackagein$*;doif[-r"$rpmpackage"];thenecho"===============$rpmpackage=============="rpm-qi-p$rpmpackageelseecho"ERROR:cannotreadfile$rpmpackage"fidone現第二特殊變數$*該變數包含所輸入命令行參數值您運行showrpmopenssh.rpmw3m.rpmwebgrep.rpm$*包含3字元串即openssh.rpm,w3m.rpmandwebgrep.rpm.5.引號向程序傳遞任何參數前程序擴展通配符變數所謂擴展意思程序通配符(比*)替換合適文件名變數替換變數值防止程序作種替換您使用引號:讓我看例假設前目錄些文件兩jpg文件mail.jpgtux.jpg1.2編譯SHELL腳本#ch#!/bin/shmod+xfilenamecho*.jpg∪緩螅梢醞ü淙耄?./filename執行您腳本列印"mail.jpgtux.jpg"結引號(單引號雙引號)防止種通配符擴展:#!/bin/shecho"*.jpg"echo'*.jpg'列印"*.jpg"兩單引號更嚴格些防止任何變數擴展雙引號防止通配符擴展允許變數擴展#!/bin/shecho$SHELLecho"$SHELL"echo'$SHELL'運行結:/bin/bash/bin/bash$SHELL種防止種擴展使用轉義字元——反斜桿:echo/*.jpgecho/$SHELL輸:*.jpg$SHELL6.Heredocuments要幾行文字傳遞給命令heredocuments(譯者註:目前沒見該詞適合翻譯)種錯每腳本寫段幫助性文字用我四heredocuments必用echo函數行行輸"Heredocument"heredocument段特殊目代碼塊.使用I/O重定向形式命令序列傳遞交互程序或者命令,比ftp,cat,或者ex文本編輯器.1COMMANDlimitstring用劃定命令序列范圍(譯者注:兩相同limitstring間命令序列).特殊符號heredocument形式看:1#!/bin/bash2interactive-program選擇名字非詭異limitstring避免命令列表limitstring重名問題.面例該例我文件進行重命名並且使用heredocuments列印幫助:#!/bin/sh#wehavelessthan3arguments.Printthehelptext:if[$#-lt3];thencat4)函數您寫些稍微復雜些程序您發現程序能幾使用相同代碼並且您發現我使用函數便函數:functionname(){#insidethebody$#$2thesecondbody}您需要每程序始函數進行聲明面叫做xtitlebar腳本使用腳本您改變終端窗口名稱使用叫做help函數您看定義函數使用兩#!/bin/sh#vim:setsw=4ts=4et:help(){catshiftby2--)shift;break;;#endofoptions-*)echo"error:nosuchoption$1.-hforhelp";exit1;;*)break;;esacdoneecho"opt_fis$opt_f"echo"opt_lis$opt_l"echo"firstargis$1"echo"2ndargis$2"您運行該腳本:cmdparser-lhello-f---somefile1somefile2返結:opt_fis1opt_lishellofirstargis-somefile12ndargissomefile2腳本何工作呢腳本首先所輸入命令行參數進行循環輸入參數與case表達式進行比較匹配則設置變數並且移除該參數根據unix系統慣例首先輸入應該包含減號參數.第2部實例現我討論編寫腳本般步驟任何優秀腳本都應該具幫助輸入參數並且寫偽腳本(framework.sh)該腳本包含數腳本都需要框架結構非錯主意候寫新腳本我需要執行命令:cpframework.shmyscript再插入自函數讓我再看兩例:(1)二進制十進制轉換腳本b2d二進制數(比1101)轉換相應十進制數用expr命令進行數運算例:#!/bin/sh#vim:setsw=4ts=4et:help(){cat第3部:調試簡單調試命令使用echo命令您使用echo任何懷疑錯列印任何變數值絕數shell程序員要花費80%間調試程序原Shell程序處於需要重新編譯插入echo命令需要少間shell真實調試模式腳本"strangescript"錯誤您進行調試:sh-xstrangescript執行該腳本並顯示所變數值shell需要執行腳本檢查語模式使用:sh-nyour_script返所語錯誤調試shell程序程用戶剛編寫完Shell程序避免錯誤我利用Bsh提供跟蹤選項該選項顯示剛剛執行命令及參數用戶通set命令打-x選項或啟Shell使用-x選項Shell設置跟蹤模式例面代碼ice_tx:if[$#-eq0]thenecho"usage:sumintsintegerlist"exit1fisum=0until[$#-eq0]dosum='expr$sum+$1'shiftdoneecho$sum我用跟蹤模式運行:$sh-xice_tx234結顯示:+[3-eq0]+sum=0+[3-eq0]+expr0+2+sum=2+shift+[2-eq0]+expr2+3+sum=5+shift+[1-eq0]+expr5+4+sum=9+[0-eq0]+echo99面看跟蹤模式Shell顯示執行每條命令及該命令使用變數替換參數值些控制字if、then、until等沒顯示

『肆』 C語言函數問題 步驟看不明白

子函數fun實際是求一個字元串長度
首先*p=s, 此時兩個的地址是相同的,然後wihile(*p!=0) p++;是將p指針移到字元串尾部,字元串是以0結束的。然後用此時exec是qdiolog特有的 用於在對話框強制顯示到最上面來 而show可以說是所有widget都有 只是普通的顯示 和hide相反p的指針地址與s的指針地址相減,即字元串的長度。

fun("0ABCDEF")就是一個簡單的函數調用。

『伍』 [求助]有沒有C語言高手啊,關於execv的用法

execv用法介紹:

execv會停止執行當前的進程,並且以progname應用進程替換被停止執行的進程,進程ID沒有改變。

如果應用程序正常執行完畢,那麼execv是永遠不會返回的;當execv在調用進程中返回時,說明這個應用程序應該出錯了,此時它的返回值應該是-1,具體的錯誤代碼可以通過全局變數errno查看,還可以通過stderr得到具體的錯誤描述字元串。

示例如下:

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


main(void)
{
pid_tpid=fork();

if(pid==0)//thisisthechildprocess
{
execv("/bin/ls",NULL);

//theprogramshouldnotreachhere,.
printf("commandlsisnotfound,errorcode:%d(%s)",errno,strerror(errno);
}

『陸』 (C語言)如何使用exec函數族

函數名: exec...
功 能: 裝入並運行其它程序的函數
用 法: int execl(char *pathname, char *arg0, arg1, ..., argn, NULL);
int execle(char *pathname, char *arg0, arg1, ..., argn, NULL,
char *envp[]);
int execlp(char *pathname, char *arg0, arg1, .., NULL);
int execple(char *pathname, char *arg0, arg1, ..., NULL,
char *envp[]);
int execv(char *pathname, char *argv[]);
int execve(char *pathname, char *argv[], char *envp[]);
int execvp(char *pathname, char *argv[]);
int execvpe(char *pathname, char *argv[], char *envp[]);
程序例:/* execv example */
#include <process.h>
#include <stdio.h>
#include <errno.h>void main(int argc, char *argv[])
{
int i; printf("Command line arguments:\n");
for (i=0; i<argc; i++)
printf("[%2d] : %s\n", i, argv[i]); printf("About to exec child with arg1 arg2 ...\n");
execv("CHILD.EXE", argv); perror("exec error"); exit(1);
}

『柒』 c語言里怎麼向 WinExec("",SW_HIDE); 裡面引用變數

要這樣寫:
CString str;
str.Format("SD.EXE %s %s", 變數一, 變數二);
WinExec(str,SW_HIDE);

『捌』 C語言中WinExec的用法

暈了。你要打開的是.wma格式。可是WinExec只能打開.EXE格式的文件。
---------------------------------------------
一樓的也錯的太離譜了,就算是WinExec,人家樓主對字元串的寫法也是對的。真不知道你有沒有調試一下。
---------------------------------------------
OK,給樓主一個可以運行的:
ShellExecute(0, "open", "F:\\TDDOWNLOAD\\200711041818358230120.wma", NULL, NULL, SW_SHOW);

『玖』 linux下C語言, exec函數調用程序不接受ctrl+c

當父進程結束後,退出到控制台,此時你雖然在控制台上能看到子進程的輸出信息,但是你所做的操作都是針對控制台的,子進程可以用控制台系統命令kill結束

熱點內容
聯想安卓升級包在哪裡下載 發布:2025-01-24 09:15:20 瀏覽:591
認票的演算法 發布:2025-01-24 09:00:45 瀏覽:927
android調用列印機 發布:2025-01-24 09:00:32 瀏覽:808
網易版我的世界伺服器如何 發布:2025-01-24 08:55:47 瀏覽:968
編譯器鼻祖 發布:2025-01-24 08:54:11 瀏覽:844
如何用安卓編譯項目 發布:2025-01-24 08:30:46 瀏覽:863
計算機同時輸出和存儲設備的區別 發布:2025-01-24 08:29:21 瀏覽:581
食物語上傳 發布:2025-01-24 07:58:44 瀏覽:754
編程相關書籍 發布:2025-01-24 07:55:45 瀏覽:430
英雄聯盟手游需要哪些配置 發布:2025-01-24 07:42:03 瀏覽:985