큰 파일을 나눕니다. 파일의 각 부분을 읽으려면 fork()
을 읽으려고합니다. 내 프로그램은 이미 파일을 읽고 이중 연결된 목록을 사용하여 파일에서 단어 발생의 총 개수를 계산합니다. 이제 파일을 다른 섹션으로 나누고 각각에 fork()
을 사용해야합니다. mmap()
을 이미 사용했지만이 파일로 수행 할 작업이나이 파일에 fork()
을 구현하는 방법에 대해서는 확신 할 수 없습니다. 나는 fork()
예제를 보았지만 그 중 아무 것도 자식 프로세스를 만들고 pid 번호를 인쇄하는 것 외에는 아무 것도하지 않는 것 같습니다. 누구든지 내가하려고하는 일에 도움이되는 좋은 예를 알고 있습니까? 또는 어떻게이 부분을 구현할 수 있습니까? 읽기 좋은 생각파일에서 c에 fork()를 사용하는 방법
proc_num = atoi(argv[3]); // assign the PROCNUMBER to proc_num as an integer
section = size/proc_num;
// map file to memory and divide workload by passing different
// starting address and stopping address to different processes
if ((addr = mmap(0, size, PROT_READ, MAP_SHARED , file, 0)) == (void *) -1) {
perror("ERROR: Mapping did not work!");
exit(1);
}
char tmp_word[25];
int j, k = 0;
addr = mmap(0, size, PROT_READ, MAP_SHARED , file, 0);
char buf[proc_num][1024];
// Create fork
pid = fork();
if (pid == -1) {
perror("ERROR: Fork failed!");
} else {
for (i = 0; i < proc_num; i++) {
for(j = 0; j < size; j++) {
if(addr[i*size+j] != ' ' && addr[i*size+j] != '\n') {
tmp_word[k]=addr[i*size+j];
k++;
} else {
tmp_word[k]='\0';
// Count the words
count_words(tmp_word, words);
tmp_word[0] = '\0';
k = 0;
}
}
}
}
kill(pid, SIGKILL);
munmap(addr, size);
close(file);
} else {
perror("ERROR: Not a file!");
exit(1);
}
[고급 리눅스 프로그래밍] (http://advancedlinuxprogramming.com/)에는'fork'에 대한 자세한 설명이 있습니다; 하지만 귀하의 경우에 사용 가치가 있는지 모르겠습니다 (문제는 I/O 바인딩, CPU 바인딩이 아님) –
내 과제. fork를 사용하여 큰 파일에서 모든 단어의 출현을 세는 다른 프로세스를 만들어야합니다. –
그런 다음 시도한 것은 무엇입니까? 'fork'를 호출하고, 결과를 유지하고, 실패시'<0', 자식 프로세스에서'== 0', 부모 프로세스에서'> 0' ... –