我在C(Linux)中尝试使用API调用(仅)通过命令行将多个输入文件复制到一个输出文件中时遇到问题。我在互联网上搜索了答案,但似乎没有解决。 我的程序允许我通过命令行指定多个输入文件和一个输出文件。例如:
./archiver file1.txt file2 file3 file4 outputfile
我使用argc
/ argv
阅读了这些参数。出于某种原因,当我执行ls -l
时,./archiver
和outputfile
具有相同的字节数,这意味着我的输入文件都没有被复制到我的输出文件中,只是内存中的任何内容(当我做cat outputfile
它显示了一堆这些)
输入文件中的所有内容都不在我的输出文件中。
请帮助我,因为在那些“我不知道该做什么之后我试着阅读malloc()
等但是我不知道如何实现这个或者如果那甚至相关的。
感谢您的帮助,感谢您的帮助。
file_desc_in = open(argv[i],O_RDONLY,0);
//NEED a loop to copy multiple files in...
while (!eof) {
bytes_read = read(file_desc_in, &buffer, sizeof(buffersize));
if (bytes_read > 1)
bytes_written = write(file_desc_out, &i, bytes_read);
else {
eof=1;
}
我没有包含错误,但我确实有错误。感谢您立即回复。
答案 0 :(得分:1)
查看代码会有所帮助。这里没有太多东西可以继续,但我会猜测一下。我怀疑你正在复制argv[0]
(你的程序)指定的文件而没有得到其余的。我不认为我能用你给的东西做得更好。
答案 1 :(得分:1)
您说您只使用API调用。您在谈论什么API? POSIX API?标准C文件I / O API?
如果您只是组合输入文件,那么您真的不需要编写C程序来完成它。由于您运行的是Linux,请尝试使用shell命令cat input1 input2 input3 > output
。
如果您必须编写C程序来执行此操作,请从简单开始。在实际执行任何文件I / O之前,请确保您可以正确解释输入参数。让您的程序只需在命令行输入中读取并打印出类似这样的内容:
Input files: file1.txt file2.txt file2.txt
Output files: outputfile.txt
这样,您可以在开始担心文件I / O之前验证CLI解析代码是否正常工作。一次调试一件事情要容易得多。
答案 2 :(得分:1)
您的外部循环需要打开每个文件名,并在循环结束时关闭它。在读取所有输入文件后,在最后关闭输出文件。
您还应该了解open
,read
,write
和fopen
,fread
,fwrite
之间的区别。