Wednesday, 15 June 2011

c - not able to shift current process id to child process id -



c - not able to shift current process id to child process id -

int _tmain(int argc, _tchar* argv[]) { winsockstartup(); //declarations char data[255]=" server data",buff[255]; int len,port,ch,y=1,n=0, no_of_threads=0,cp_ret=0;//,sel_ret=0,itr=0,max_fd; struct sockaddr_in new_addr; int sockfd,data_len_recv=-1,on=1,accfd=0,len_addr,data_len_send=-1; //file writing attributes char filename[1024],logdata[1024]; systemtime st; //setting initial values memset(&new_addr,0,sizeof(new_addr)); memset(&sockfd,0,sizeof(int)); memset(&accfd,0,sizeof(int)); memset(&len_addr,sizeof(struct sockaddr),sizeof(int)); memset(&port,0,sizeof(int)); memset(buff,0,sizeof(buff)); //create process atrribute startupinfo si; process_information pi_child,pi_parent,pi_current; zeromemory( &si, sizeof(startupinfo) ); si.cb = sizeof(startupinfo); zeromemory( &pi_child, sizeof(process_information) ); zeromemory( &pi_parent, sizeof(process_information) ); //select attributes struct timeval soctimeval; soctimeval.tv_sec = 20; soctimeval.tv_usec = 0; fd_set read_fd_set; fd_zero(&read_fd_set); printf("enter port number\n"); scanf("%d",&port); new_addr.sin_family= af_inet; for(int y=0;y<7;y++) new_addr.sin_zero[y]= 0; new_addr.sin_port=htons(port); new_addr.sin_addr.s_addr = inet_addr("127.0.0.1"); //get parent process id pi_parent.dwprocessid= getcurrentprocessid(); //socket making sockfd =socket(new_addr.sin_family, sock_stream,ipproto_tcp); if(sockfd==-1) { printf("error in opening socket %d \n",wsagetlasterror()); } else printf("socket made successfully\n"); setsockopt(sockfd,sol_socket,so_reuseaddr,(char *)&on,sizeof(on)); //bind socket if((bind(sockfd,(struct sockaddr *)&new_addr,sizeof(struct sockaddr)))==-1) { printf("bind error %d \n",wsagetlasterror()); } else printf("binded successfully\n"); //listen socket if( listen(sockfd,10)==-1) { printf("error in listening %d \n",wsagetlasterror()); } else printf("listened successfully\n"); while(1) { //accept accfd= accept(sockfd,(struct sockaddr *)&new_addr,&len_addr); if(accfd==-1) { printf("error in take %d \n",wsagetlasterror()); } else printf("accepted successfully\n"); //creating kid process multiple clients no_of_threads ++; printf("client no: %d\n",no_of_threads); cp_ret=createprocess(text("c:\\users\\richa-a\\desktop\\create_process_multiclient1\\client_server\\debug\\server_tcp.exe"), null, null, // process handle not inheritable null, // thread handle not inheritable (bool)1, // set handle inheritance true detached_process, // no creation flags null, // utilize parent's environment block null, // utilize parent's starting directory &si, // pointer startupinfo construction &pi_child ); pi_current.dwprocessid=getcurrentprocessid(); //even after create process. current id still of parent. if(pi_parent.dwprocessid==pi_current.dwprocessid || cp_ret==0) { printf("\nparent id %d\n",pi_parent.dwprocessid); printf("process id of kid %d \n",pi_child.dwprocessid); printf("process id of current function %d \n",pi_current.dwprocessid); printf("child nt running code\n"); } //pi_current.dwprocessid=getcurrentprocessid(); if(pi_child.dwprocessid==pi_current.dwprocessid) { //opening file getlocaltime (&st); sprintf(filename,"d:\\serve_client\\child_process_%d_%d__%d.%d.%d.%d.log",st.wday,st.wmonth,st.whour,st.wminute,st.wsecond,st.wmilliseconds); child_fptr=fopen(filename,"wb"); sprintf(logdata,"logging start client %d\n",no_of_threads); loginfo(logdata); //fwrite(logdata,sizeof(logdata),sizeof(logdata),child_fptr); sprintf(logdata,"process id of parent %d\n",pi_parent.dwprocessid); loginfo(logdata); sprintf(logdata,"process id of kid %d \n",pi_child.dwprocessid); loginfo(logdata); sprintf(logdata,"process id of current function %d \n",pi_current.dwprocessid); loginfo(logdata); sprintf(logdata,"child running code\n"); loginfo(logdata); //recv info data_len_recv=recv(accfd,(char *)buff, sizeof(buff)-1,0); buff[data_len_recv]='\0'; sprintf(logdata,"%s",buff); loginfo(logdata); if(data_len_recv==sizeof(buff)) { sprintf(logdata,"data rev successfully\n"); loginfo(logdata); sprintf(logdata,"recv data: %s\n",buff); loginfo(logdata); } else if(data_len_recv<sizeof(buff)) { sprintf(logdata,"hlf info rev successfully\n"); loginfo(logdata); sprintf(logdata,"recv data: %s\n",buff); loginfo(logdata); } else if(data_len_recv==-1 || data_len_recv==0) { sprintf(logdata,"error in recv %d \n",wsagetlasterror()); loginfo(logdata); } //send info data_len_send=send(accfd,(const char *)data, sizeof(data),0); if(data_len_send==sizeof(data)) { sprintf(logdata,"data send successfully\n"); loginfo(logdata); sprintf(logdata,"data send: %s\n",data); loginfo(logdata); } else if(data_len_send<sizeof(data)&& data_len_send!=0) { sprintf(logdata,"hlf info send successfully\n"); loginfo(logdata); sprintf(logdata,"data send: %s\n",data); loginfo(logdata); } else if(data_len_send==-1) { sprintf(logdata,"error %d \n",wsagetlasterror()); loginfo(logdata); } closesocket(accfd); homecoming 0; }//child end }//while loop end closesocket(sockfd); printf("socket closed\n"); winsockcleanup(); printf("cleanup done\n"); getch(); homecoming 0; }

i made server , multi-client process. after create process need alter current programme id kid id run rest of program. want kid process run send , recieve part of server

please help me regarding this.

an id assigned process when process starts. there not way alter it. means cannot shift anybody.

the posted piece of code not complete. not clear doing.

it seems confusing createprocess unix fork. have different semantics.

c multiprocessing createprocess

No comments:

Post a Comment