C++ 为Unix编写cmp之类的实用程序来处理可选的[SKIP]参数
我需要为C中的Unix创建类似于C++ 为Unix编写cmp之类的实用程序来处理可选的[SKIP]参数,c++,c,linux,unix,while-loop,C++,C,Linux,Unix,While Loop,我需要为C中的Unix创建类似于cmp的实用程序。 cmp比较两个文件并输出不同的第一个字符数 cmp [-s] file1 file2 [SKIP1] [SKIP2] 我每件事都做得很好,但由于跳槽,我遇到了一些麻烦。 SKIP1用于n个字符后的比较file1,而SKIP2用于n个字符后的比较file2 代码的一部分: ... while ((fgets(filebuff, MAXLINE, file1)) != NULL && (fgets(filebuf
cmp
的实用程序。
cmp比较两个文件并输出不同的第一个字符数
cmp [-s] file1 file2 [SKIP1] [SKIP2]
我每件事都做得很好,但由于跳槽,我遇到了一些麻烦。
SKIP1
用于n个字符后的比较file1
,而SKIP2
用于n个字符后的比较file2
代码的一部分:
...
while ((fgets(filebuff, MAXLINE, file1)) != NULL &&
(fgets(filebuff2, MAXLINE, file2)) != NULL)
{
++linepos;
same = compare_str(filebuff, filebuff2); // my function that return 0 if equal and change pos of first diff element
if (same != 0)
{
fclose(file1);
fclose(file2);
printf("differ: char %i, line %i\n",charpos,linepos);
return 1;
}
}
fclose(file1);
fclose(file2);
return 0;
我不知道如何与从SKIP1或SKIP2开始进行比较
while ((fgets(filebuff, MAXLINE, file1))!=NULL && (fgets(filebuff2, MAXLINE, file2)) != NULL)
这段代码逐行读取文件,并从发送到函数的每个文件中读取两行。我不想更改比较函数。我需要把已经剪好的绳子送过去。可能从n位置开始使用
fgets()
循环,但我不知道如何开始你考虑调用<代码> fStuts<代码>吗?你可能不应该使用<代码> fgScript()<代码>(你应该使用<代码> Frad())/>代码>。一个主要原因是cmp
用于比较二进制文件,而二进制数据中经常出现的空值确实会把工作搞砸。您需要修改比较代码,以获取每个缓冲区的数据长度。使用fseek()
是其余大部分答案。