Exemple #1
0
//将数据写入到远程文件
int fileclient::writefile(const char *data, int data_len,
		const char *remote_file)
{
	if (data == NULL || data_len <= 0 || remote_file == NULL)
		return FILE_PARAM_ERROR;

	if (!_connected)
	{
		if (connection() < 0)
			return SOCK_CONNECT_ERROR;
	}

	bigwritereqall writereq(remote_file, data_len);

//	printf("write remote file %s \n", remote_file);

	int msg_len =  data_len + sizeof(bigwritereqall);
	char *send_data = (char *) malloc(msg_len);
	if (data == NULL)
	{
		free(send_data);
		printf("malloc fail \n");
		return FILE_FAIL;
	}

	memcpy(send_data, (char *) &writereq, sizeof(bigwritereqall));
	memcpy(send_data + sizeof(bigwritereqall), data, data_len);

	(void )send_tmout(_sock_fd, send_data, msg_len, 5000);

	free(send_data);
	bigwriterspall resp;
	msg_len = sizeof(bigwriterspall);

	if (msg_len != recv_tmout(_sock_fd, (char*) &resp, msg_len, 5000))
	{
        printf("recv_packet error \n");
		return SOCK_ERROR;
	}

	printf("savefile %s resp = %d \n", remote_file, resp.resp.result);

	return resp.resp.result == 0 ? FILE_SUCCESS : FILE_FAIL;
}
Exemple #2
0
/* 产生访存请求 */
int readrequest(Ptr_MemoryAccessRequest ptr_memAccReq)
{
	printf("请输入访存请求(输入x结束程序):\n");
	char c;
	unsigned long addr;
	BYTE value;
	int i,num;
	c=getchar();//读取请求类型
	//printf("#c的值是%c#\n",c);
	if(c!='s'&&c!='x'&&c!='y'){//如果c不是s或x则读取请求地址
		scanf(" %lu",&addr);//读取请求地址
		ptr_memAccReq->command=0;//不是命令	
	}
	switch(c){
		case 'r':
			ptr_memAccReq->reqType = REQUEST_READ;
			ptr_memAccReq->virAddr = addr;
			scanf(" %u",&(ptr_memAccReq->pid));
			printf("产生请求:\n地址:%lu\t类型:读取\tPID:%u\n", ptr_memAccReq->virAddr,ptr_memAccReq->pid);
            break;
        case 'w':
			ptr_memAccReq->reqType = REQUEST_WRITE;
			ptr_memAccReq->virAddr = addr;
            scanf(" %c",&value);//读入要写入的值
            ptr_memAccReq->value = value;
            scanf(" %u",&(ptr_memAccReq->pid));
            printf("产生请求:\n地址:%lu\t类型:写入\t值:%02X\tPID:%u\n", ptr_memAccReq->virAddr, ptr_memAccReq->value,ptr_memAccReq->pid);
            break;
        case 'e':
        	ptr_memAccReq->reqType = REQUEST_EXECUTE;
        	ptr_memAccReq->virAddr = addr;
        	scanf(" %u",&(ptr_memAccReq->pid));
            printf("产生请求:\n地址:%lu\t类型:执行\tPID:%u\n", ptr_memAccReq->virAddr,ptr_memAccReq->pid);
            break;
        case 's'://随机产生请求
        	ptr_memAccReq->command=0;//不是命令
        	scanf(" %d",&num);
        	printf("将产生%d条随机请求\n",num);
        	for(i=1;i<=num;i++){
        		do_request(ptr_memAccReq);
        		writereq(ptr_memAccReq);	
        	}
        	printf("%d条随机请求产生完毕\n",num);
        	break;
        case 'x':
        	ptr_memAccReq->command=-2;
        	printf("#发送退出程序命令#");
        	break;
        case 'y'://发送y命令
        	ptr_memAccReq->command=-1;
        	printf("#发送打印页表命令#");
        	break;
        default:
        	printf("请求格式有误,请重新输入\n");
    }
    if(c=='x'||c=='y'){//将命令写入fifo文件
		writereq(ptr_memAccReq);
	}
 	if(c=='r'||c=='w'||c=='e'){//将单条请求写入fifo文件
    	writereq(ptr_memAccReq);
    }
    if(c=='x')
    	return -1;//退出本程序
    while(c=getchar()!='\n')//越过行尾回车
    	;
    return 0;
    
}