一个简单的问题,希望高手帮助

newgoodboy 2002-06-11 11:48:33
两台linux机器希望传输22个文件,在目标机上我编写了一个守护的进程,通过它来从控制机器上接受文件,先接受文件的长度,然后接受相应的行数的内容,形成文件。现在得问题是我的目标机已经接受到了数据,但是在守护进程的目录下没有发现相应的文件。
下面是守护进程的源程序,希望高手指教。

#include "ServerSocket.h"
#include "SocketException.h"
#include <string>
#include <fstream>
#include <error.h>
//my—read从文件的原机器上读取数据,返回一个字符给readline函数,函数的返回值为读取的状态,1表示读取一个字符,0表示源机器已经没有文件传输,-1表示传输出错。
static int my_read(int fd,char *ptr){
static int read_cnt=0;
static char * read_ptr;
static char read_buf[4096];

if(read_cnt<=0){

if((read_cnt=read(fd,read_buf,sizeof(read_buf)))<0){

return(-1);
}else if(read_cnt==0)
return(0);
read_ptr=read_buf;
}
read_cnt--;
*ptr=*read_ptr++;
return(1);
}
//通过my_read函数读取字符,一直到读取的字符为回车符为止
int readLine(string & s)
{
int n,rc;
char c,*ptr;
char recvLine[1024];
s="";
ptr=recvLine;
for(n=1;n<1024;n++)
{
if((rc=my_read(0,&c))==1){
*ptr++=c;
if(c=='\n')
break;
}else if (rc==0)
{
if (n==1)
return(0);
else
break;
}else
return(-1);
}
*ptr=0;
s=recvLine;
return (n);
}
//主函数先传输文件的长度,然后传输文件的内容,判断最后一个字符串是否为end,如果是,表示传输没有错误,传回finish 给文件的源机器。
int main ( int argc, int argv[] )
{
string fileNames[22]={"Resovler.conf","Shared.conf", "Index.conf","Index1.conf","Index2.conf",
"Local.conf", "Merge.conf", "Merge1.conf" ,"Merge2.conf", "index_start.conf",
"index_start_1.conf" ,"index_start_2.conf" , "resolver_start.conf","storemanager_start_file.conf", "storemanager.conf",
"storenode.conf", "storenode1.conf", "storenode2.conf","query.conf", "query1.conf",
"query2.conf", "crawler.conf"};
int fileLens[22]={14,26,13,13,13,
72,8,8,8,1,
1,1,1,1,4,
3,3,3,3,3,
3,6};


while ( true ){
string::size_type beginPos=0;
string endString("End");
string finishString("finish\n");
string data;
//接受22个文件的长度
for(int i=0;i<22;i++){
readLine(data);
cout<<data<<endl;
fileLens[i]=atoi(data.c_str());

}
//接受文件的内容
for(int j=0;j<22;j++){
ofstream outFile(fileNames[j].c_str());
if(!outFile){
cerr<<"Cant open"<< fileNames[j];
return(-1);
}

for(int k=0;k<fileLens[j];k++){
readLine(data);
write(1,data.c_str(),data.size());
outFile.write(data.c_str(),data.size());
}

}
//读取终止字符串end
readLine(data);
write(1,data.c_str(),data.size());
//如果是end,那么发送finish字符串给控制的机器
if(!data.compare(endString,beginPos,3)){
write(1,finishString.c_str(),finishString.size());

}

}
}
...全文
69 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

16,467

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧