• 大小: 4KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-05-17
  • 语言: C/C++
  • 标签: 多进程  系统调用  

资源简介

用c++实现了多进程对文件的分块读取,并把读取的内容通过c++库函数对LINUX下的命令进行了系统调用

资源截图

代码片段和文件信息

// yc.cpp :利用多进程对文件的分块读取,并进行系统调用,只需这一个app和yc.h文件 
//@version:0.9
//@author:yc
//@time:25/07/13


#include 
#include 
#include 
#include  
#include     //这个头文件一定要加
#include   
#include   
#include 

#include 
#include 
#include  
#include 
using namespace std;
/**
*int转为string型
*/
string int_to_string(int num){
  ostringstream oss;
  string c = ““;
  oss << num;
  c =oss.str();
  return c;
}

/**
@line_size:每1行有多少字母
@line:要读多少行
@count_thread:第几个进程
*/
int get_line_size(int line_sizeint lineint count_thread){
if(count_thread == 0){
return 0;
}else{
return (line_size + 1) * (line * count_thread - 1) ;
}
}

/*
对每行读取的记录进行系统调用,来统计该记录在文件中出现的行号参数内容参见test方法
*/
void test_grep(const char* in_fileconst char* out_filestring filenameint thread_numint line_sizeint read_line_numint is_end){
fstream fout;
fout.open(out_fileios::out);

ifstream fin;
fin.open(in_fileios::in);
int count_read =0;
fin.seekg(get_line_size(line_sizeread_line_numthread_num)std::ios::cur); //19739665行是读取的19739667行,77是一行76个再加1
while(!fin.eof()){
count_read++;
string str_temp = ““;
getline(finstr_temp);
char tmp[1000];
if(is_end == 0 && count_read > read_line_num){
break;    //用于不是最后一块文件的跳出
}else if(str_temp.size() <= 2){
break;  //用于最后1快文件的跳出
}else{
fout< string sql = “grep -n \““+str_temp+“\“ “+filename;
cout< FILE *fp = popen(sql.c_str() “r“);   //通过popen函数来实现系统调用,返回1个字符数组,保存的系统调用的命令的结果
    while (fscanf(fp “%s“ tmp) != EOF){
for(int i = 0;i < 18;i++){
if(tmp[i] != ‘:‘)fout< else{
fout< break;
}
}
}
         //puts(tmp);
//fout<    pclose(fp);
}
}

}

/*
多进程分块读取每行固定长

评论

共有 条评论