c语言exec
‘壹’ 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结束