嘿大家使用POSIX API系统调用read
,write
,open
等。我可以打开,读取,写入文件并将其内容复制到输出文件。如何仅使用相关的系统调用将多个文件复制到输出文件?
我目前有:
filein = open(argv[1],O_RDONLY,0);
打开一个文件。(这是argv1,但我想知道如何做argv2和argv3等。)
我试过了:
j=0;
filein = open(argv[j],O_RDONLY,0);
但是将argv0的内容打印到我的输出文件中。
我被困在下一个阶段做多个文件。 (我还有一个EOF
循环,所以退出1个文件后 - 如何继续下一个文件)。
请问您如何进入下一阶段?感谢。
答案 0 :(得分:4)
argv[0]
是该计划的名称。
argv[1]
是1 st 命令行参数。
argv[2]
是2 nd 命令行参数。
等
所以:
1
处开始循环,而不是0
(即j=0
不正确)。在编写代码之前考虑算法。
现在你可以编写代码了。
如果包含错误处理,您可能会获得奖励积分。 (当文件丢失,无法读取,文件系统损坏或机器内存或磁盘空间不足时会发生什么?)
如果要将两个文件名连接到第三个文件名,则需要重新考虑算法以及所需的内容。 “读取命令行中给出的前两个文件并将它们写入第三个文件”和“将命令行上给出的所有文件附加到给定的最后一个文件”之间存在差异。
算法:
此时你会注意到很多冗余。
此算法更具挑战性,但会消除冗余。
为此,您需要了解argc
及其与argv
的关系。在伪代码中:
if number_of_arguments < 2 then
print "This program concatenates files; two or more file names are required."
exit
end
int outfile = open arguments[ number_of_arguments ] for writing
int j = 1
while j < number_of_arguments do
int infile = open arguments[ j ] for reading
string contents = read infile
write contents to outfile
close infile
increment j
end
close outfile
如果您遇到C语法问题,请搜索教程。例如:
答案 1 :(得分:2)
使用循环读取所有文件。从1开始跳过当前正在执行的进程,该进程位于argv [0]。
for(int i = 1; i < argc; ++i)
{
int filein = open(argv[i],O_RDONLY,0);
// ... process file
close(filein)
}
答案 2 :(得分:1)
argv [0]是程序的名称。 argv [1]是第一个传递命令行的。
打开输出文件,然后打开每个输入文件。将每个输入文件读入输出文件,然后将它们全部关闭并退出。
答案 3 :(得分:1)
打开一个文件。(这是argv1,但我想知道如何做argv2和argv3等。)
fopen(argv[2], ...)