继我之前的问题 [here][1] 之后,我现在想计算多个文件的行数,我想在每个文件中放置一个进程的位置,一个子进程,这将为calculateLines
他自己运行该方法文件,并找到其文件的行数。
我写fork()
为系统调用(称为my_fork()
),这是代码:
int main(int argc, char *argv[])
{
typedef struct fileChild {
pid_t processID;
char *fileName;
int processFileLines;
} child;
child children[argc]; // array of children
int n = 0; // using this to tell how much lines in a single file
int i = 0; // using this to iterate the number of files
char dig; // using this to convert into char the number of lines
while (i < argc )
{
children[i].processID = my_fork(); // create process 'i' for file 'i'
children[i].fileName = argv[i];
children[i].processFileLines = calculateLines(children[i].fileName);
}
....
....
return 0;
}
我的问题:这是子进程如何检查他的文件(文件i
)的行数吗?
我看不出这个(分叉)如何改进我的代码......请放轻松,这是我第一次使用流程。
最终版:
#include <stdio.h>
typedef unsigned int size_t;
typedef signed ssize_t;
int main(int argc, char *argv[])
{
char myArray[15];
int n = 0;
int i = 0;
pid_t pid;
for (i = 1; i < argc; i++)
{
if ((pid = my_fork()) == 0)
{
n = calculateLines(argv[i]);
sprintf (myArray, "\nfile%d: %d \n", i,n);
my_write(1,myArray,15);
}
else if (pid < 0)
break;
}
return 0;
}
在终端测试:
a@ubuntu:~/Desktop$ ./ProjOsFInal somefile.txt about.html epl-v10.html
a@ubuntu:~/Desktop$
file2: 300
file1: 133
file3: 327
file2: 300
file3: 327
file3: 327
file3: 327