我正在尝试编写简单的 c 函数,这将使我有可能查看从一个流到另一个流的数据传输进度并将其显示在我的字符 LCD 上。
我设法传输数据并指示进度,但如何获得管道结果?
所以基本上我想在c中做的对应shell命令:
/home/image.img | md5sum > result
我遇到的问题是标准输出。我想得到一个 char * 结果。
换句话说,md5sum 在屏幕上返回一个字符串,如“5193fd9ebfa30bcb914e7af4760deb15”,但我想将它放到我的 char * 结果中,以便在函数中进一步使用。
FILE *in_stream, *out_stream;
#define TRANSFER_BLOCK_SIZE 1048576 //one MB
int n=0;
int i=0;
long int input_size=0;
unsigned char buffer[TRANSFER_BLOCK_SIZE];
if((out_stream=popen("md5sum","w"))==NULL)
{
perror(output_pipe_name);
return 1;
}
if((in_stream=fopen("/home/gregorek/image.img","r"))==NULL)
{
perror(input_file_name);
return 1;
}
//check total size of the input file
fseek(in_stream,0,SEEK_END);
input_size=(ftell(in_stream)/TRANSFER_BLOCK_SIZE)+1;
fseek(in_stream,0,SEEK_SET);
//
do
{
i++;
memset(buffer,'\0',TRANSFER_BLOCK_SIZE);
n=fread(buffer,sizeof(unsigned char),TRANSFER_BLOCK_SIZE,in_stream);
lcd_display(i); //this is my progress indicator
fwrite(buffer,sizeof(unsigned char),n,out_stream);
}
while(!feof(in_stream));
fclose(in_stream);
pclose(out_stream);
返回0;
}
谢谢