C语言执行linux shell命令,如果没有返回结果,可直接使用system()函数,对于有返回结果的,可以用popen命令,对其封装后,可以获取相应的返回信息。
方法一:
#include <stdio.h>
int main(void)
{
FILE *fp = NULL;
char buf[100]={0};
fp = popen("cat 11.txt", "r");
if(fp) {
int ret = fread(buf,1,sizeof(buf)-1,fp);
if(ret > 0) {
printf("%s",buf);
}
pclose(fp);
printf("\n");
}
}
方法二:函数封装如下:
void ExecCmd(char * in,char out[])
{
FILE *fp = NULL;
fp = popen(in, "r");
if(fp)
{
int ret = fread(out,1,sizeof(out)-1,fp);
if(ret > 0) {
printf("%s",out);
}
pclose(fp);
printf("\n");
}
}
调用示例:
char * shl="cat 11.txt";
char buf[300]={0};
ExecCmd(shl,buf);
字符串相关函数实现:
两个字符串拼接成一个字符串:
char *join(char *a, char *b)
{
char *c = (char *) malloc(strlen(a) + strlen(b) + 1); //局部变量,用malloc申请内存
if (c == NULL) exit (1);
char *tempc = c; //存储首地址
while (*a != '\0') {
*c++ = *a++;
}
while ((*c++ = *b++) != '\0') {
;
}
//此时指针c已经指向拼接之后的字符串的结尾'\0' !
return tempc;//返回值是局部malloc申请的指针变量,需在函数调用结束后free
}