以前の質問[ここ][1]に続いて、複数のファイルの行数を計算したいと思います。各ファイルに、プロセス、その問題の子プロセスを配置しcalculateLines
、自分のメソッドを実行します。 file、およびそのファイルの行数を見つけます。
私は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;
}
私の質問:これは、サブプロセスが自分のファイル(file 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