C++ 在linux中使用两个进程读取文件?
我编写了一个程序来实现这一点: 进程p1将打开一个文件,然后p1将读取该文件,直到文件结束。进程p2将读取同一文件,然后p1将读取,以此类推,直到文件结束。 e、 g.文件包含100行,然后p1将读取0-10行,然后p2将读取10-20行,然后p1将读取20-30行,依此类推 p1代码C++ 在linux中使用两个进程读取文件?,c++,linux,file,file-io,signals,C++,Linux,File,File Io,Signals,我编写了一个程序来实现这一点: 进程p1将打开一个文件,然后p1将读取该文件,直到文件结束。进程p2将读取同一文件,然后p1将读取,以此类推,直到文件结束。 e、 g.文件包含100行,然后p1将读取0-10行,然后p2将读取10-20行,然后p1将读取20-30行,依此类推 p1代码 pid_t cpid; #define MAXR 5 //Maximum number of rows void sigread(int signo){ //When a signal received rea
pid_t cpid;
#define MAXR 5 //Maximum number of rows
void sigread(int signo){ //When a signal received read MAXR line
int i;
char buf[MAXS];
cout<<"p1\n";
for(i=0;i<MAXR;i++){
cin.getline(buf,MAXS);
cout<<buf<<"\n";
}
signal(signo,sigread); //register signal again
kill(cpid,SIGUSR2);//send a signal to p2 to read another MAXR line
}
int main(){
signal(SIGUSR1,sigread); //register signal handler to this process
char buf[MAXS];
int c=-1;
fd = open("in.txt",O_RDONLY);
dup2(fd,0); //duplicate file descriptor to STD_IN
cpid = fork();//Create a child process
if(cpid<0){
cout<<"Fork failed\n";
exit(1);
}
if(cpid>0){
while(1); //run forever
}
else{
execlp("./p2","p2",NULL); //Use execlp to execute p2
}
return 0;
}
pid\t cpid;
#定义MAXR 5//最大行数
无效sigread(int signo){//当接收到读取MAXR行的信号时
int i;
字符buf[MAXS];
最后它能起作用吗
只是我需要在每次输入和输出之后添加fflush()
cout<<buff;
fflush(stdout);
cin>>buff;
fflush(stdin);
coutbuff;
fflush(stdin);
您需要将行号转换为文件偏移量(以字节为单位)。这需要读取前面的所有行。然后您需要一些IPC让第一个进程与第二个进程通信该偏移量。为了实现此目的,使用了系统调用。。
cout<<buff;
fflush(stdout);
cin>>buff;
fflush(stdin);