下面是输入的版本:主要是调用popen函数,这个函数的缺点是要默认的开启一个sh
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define MAX_SIZE 1024
void InputShell(char * shell)
{
FILE *read_fp = NULL;
char buffer[MAX_SIZE];
int chars_read = 0;
memset(buffer, 0, sizeof(buffer));
read_fp = popen(shell, "r");
if (read_fp != NULL)
{
chars_read = fread(buffer, sizeof(char), MAX_SIZE, read_fp);
while (chars_read > 0)//读取多数shell命令,shell命令比较长。
{
buffer[chars_read - 1] = 0;
printf("Reading:\n%s\n", buffer);
chars_read = fread(buffer, sizeof(char), MAX_SIZE, read_fp);
}
pclose(read_fp);
//return EXIT_SUCCESS;
}
}
int main()
{
char shell[MAX_SIZE] = {0} ;//= NULL;
//while(1)
//{
scanf("%s",shell);
//gets(shell);
InputShell(shell);
//}
return EXIT_FAILURE;
}
=========================================另一个用管道的==================
#include <stdio.h>
main(int argc, char *argv[]){
FILE *fp;
char str[255];
if (argc!=5){
printf("%s\n%s\n",
"Usage:",
"ftp <ip> <user> <pass> <filename>");
exit(0);
}
if ((fp=popen("ftp -n","w"))==NULL) {
puts("Run ftp fail !");
exit(0);
}
//while ((fgets(str,255,fp))!=NULL) puts(str);
fprintf(fp,"open %s\n",argv[1]);
fprintf(fp,"user %s %s\n",argv[2],argv[3]);
fprintf(fp,"prompt\n");
fprintf(fp,"mget *%s\n",argv[4]);
fprintf(fp,"bye\n");
pclose(fp);
}
sno: 可以管道读写====这样用一个发命令, 用buffer来接收, 并判断字符串然后再次发送命令等