Wednesday, December 2, 2009

Top secret

Хэнд ч хэлж болохгуй этр. Яагаад гэвэл Эрдэнэбат багшийн блог дээр миний блог бүртгэлтэй байгаа учир би гарчигаа lab7 энэ тэр гэж өгсөнгүй л дээ. ххэ
Түрүү жил SW302 -н 7,8,9 лабыг хэрэв коде-г нь тавьхаас өмнө лабрторын удирдамжийг нь гаргаад. Хэрэв бодолт нь гархаас нь өмнө хийвэл нэмэлт оноо тавьна гэж байсын.
Иймийн тул өөрийн хийсэн нэмэлт оноонын ажилаа орууллаа.
Мэдээж тайлбар нтр гээд хялбархан зүйл бичхийн оронд өөрийн төсөөллөөр бичээд үзхэд юу нь буруудхав.
HTML эдиторын хувьд блогтоо скриптыг нь оруулхаас залхуураад байгаа тул жоохон хэлбэр дүрсгүй зүйл байгаа уучилна биз.

#include < stdio.h>
#include < stdlib.h>
#include < sys/stat.h>
#include < fcntl.h>
#define TOTAL_PROCESS 4
#define BUFFER_SIZE 100

int read_file_size,read_file=-1,write_file=-1;

int sub_process(int arg0);
int write_func(int start_file_offset,int rw_file_offset);
int coding(char *buffer,int length);

int
main(int argn, char *argc[])
{
if(argn<2) { printf( "Usage: ./converter ConvertFileName\n"); return 0; } read_file = open(argc[1],O_RDONLY); if(read_file ==-1) { perror("Can't read file!"); exit(1); } write_file = creat("myWriteFile.txt",S_IRUSR |S_IWUSR); if(write_file==-1) { perror("Can't create file!"); exit(1); } read_file_size = lseek(read_file,0,SEEK_END); //printf("read file size = %d\n",read_file_size); //lseek(write_file,read_file_size,SEEK_SET);//bichih filedaa ijil zai nootsolj baina. sub_process(TOTAL_PROCESS); close(read_file); close(write_file); exit(0); } int sub_process(int arg0) { if(arg0==0){return 0;} printf("process number( %d )\n",arg0); int start_position=0; int offset_position=read_file_size/TOTAL_PROCESS; //printf("(p)Main program: %d\n",getpid()); long child_pid = fork(); if(child_pid ==0 ) { //printf("\t>> Child process1: %d, Parent process: %d\n",getpid(),getppid());

start_position = (TOTAL_PROCESS-arg0)*offset_position;
printf("start_position = %d\n",start_position);
if(arg0==1)
{
offset_position+=read_file_size - TOTAL_PROCESS*offset_position;
}
printf("offset_position = %d\n",offset_position);
write_func(start_position,offset_position);
}else
{
if(child_pid>0)
{
//printf("(p)Parent process forked successfully\n");
//printf("(p)Parent process: %d,Child process%d\n",getpid(),child_pid);
int status;
sub_process(arg0-1);
wait(&status);//this comment uncomplete!
}else
{
printf("(p)Error!Failed to create child process!\n");
}
}
}
int write_func(int start_position,int offset_position)
{
lseek(read_file,start_position,SEEK_SET);
lseek(write_file,start_position,SEEK_SET);

int i=0,j;
char my_buffer[BUFFER_SIZE+1]={};
for(i=0;i0)
{
read(read_file,my_buffer,i);
coding(my_buffer,i);
write(write_file,my_buffer,i);
//for(j=0;j< stdio.h>
#include < fcntl.h>
#include < sys/types.h>
#include < dirent.h>
#include < sys/stat.h>
#define PIPESIZE 30
#define FALSE 0
#define TRUE 1

int chek_filename(char my_path[])
{
//DIR *path=opendir(my_path);
//if(readdir(path)==NULL)return FALSE;
return TRUE;
}
int read_file(char file_name[],char search_word[])
{//read file
int search_file_discriptor = -1;
search_file_discriptor = open(file_name,O_RDONLY);
//printf("search_file_discriptor is %d\n",search_file_discriptor);
/*long search_file_size = lseek(search_file_discriptor,SEEK_END);
lseek(search_file_discriptor,SEEK_SET);//set file pointer 0*/
char pipe[PIPESIZE+1]={};//declare and full write Null terminate character
int n,length=sizeof(search_word);//n is read character length
int i,j=0;//i is counter
int t=FALSE;
while((n = read(search_file_discriptor,pipe,PIPESIZE))>0)
{
//printf("%s\n",pipe);
for(i=0;id_type;
file_name = current_file->d_name;
if(file_name[0]!='.')
{//is not equal hidden file or home, parent dir
printf("%d ",(int)current_file->d_ino);

if(file_type==4)//is_folder
{
printf("%s\n",file_name);
file_list(file_name,search_word);
}
if(file_type==8)//is_file
{
printf(((read_file(file_name,search_word)==1)?"*%s\n":"%s\n"),file_name);
}
}
}
return 0;
}

int main(int argn,char *args[])
{
char *msg = "Usage: pathscanner [PATH] [SEARCH_WORD]\n\tPATH ni haigdah directoriin buten ner baina.\n\tSEARCH_WORD ni [PATH]-iin daguu baigaa file-uudaas haih ug bolno,\nherev [SEARCH_WORD] oldvol file-iin ner urdaa '*'-oor temdeglegdej hevlegdeh bolno.";
if(argn<3)
{
printf("%s\n",msg);
return 0;
}else
{
if(chek_filename(args[1]))
{// Director list
file_list(args[1],args[2]);
}else printf("%s\n",msg);
}
//printf("%d\n",read_file(args[1]));
return 0;
}
үг хайдаг алгоритмыг өөрөө зохиосон тул с гийн сангийн функцээс мэдээж муу байгаа.
Мөр хандалт гэдгийг ойлгоно биз.
Багшийн тайлбар хүсээд байгаа кодоос ялгаатай нь би өөрөө хувьсагч функцаа өөрт ойлгомжтойгоор нэрэлж зарим газар нь тайлбар хийсэн тул ойлгомжгүй зүйл байхгуй байх гэж бодож байна.
Харин рекурсивар дуудагдан хүү процесс үүсгэн ажиллаж байгаа алгоритмын хувьд яг зөв гэдгийг хэлэх байна. Харин exec -г ашиглаагүй бичигдсэн болхоор санааг нь бүрэн гаргаагүй байж магад.


эх кодийг эндээс лаб8 нэмэлт оноо
мөн эндээс  лаб7 нэмэлт оноо
эсвэл эндээс  хоёуланг нь

No comments:

Post a Comment