【发布时间】:2015-08-05 00:28:08
【问题描述】:
例如,我编码:
fp = popen("wc -l < myfile", "r");
但myfile 应该是解析到该项目的任何文件名。它可以是文件abc.txt 或123.txt 或xy.txt 等。
然后我想得到执行这个wc -l < myfile的输出。但问题是我不知道C中的哪个函数可以帮助我将myfile的名称解析为这个shell命令,我也可以得到输出。
谁能给我一些建议?
编辑:
我要阅读的文件非常大。我想将它的数据读入一个数组。我不能使用列表来存储它,因为在列表中定位特定数据太慢了。问题是如果我用一维数组来malloc()内存空间给数组,笔记本上没有足够的连续内存空间。因此,我打算使用二维数组来存储它。所以我必须得到文件中的行数,然后通过log决定这个数组中每个维度的大小。
感谢所有回答。这个项目是关于读取两个文件。第一个文件比第二个文件大得多。第二个文件是这样的:
1 13 0
2 414 1
3 10 0
4 223 1
5 2 0
每行中的第三个数字称为“ID”。例如,num“1”的 ID 为 0,num“2”的 ID 为 1,num“3”的 ID 为“0”。 (忽略每行中间的数字) 第一个文件是这样的:
1 1217907
1 1217908
1 1517737
1 2
2 3
2 4
3 5
3 6
如果第一个文件中的每个 num 的 ID 为“0”,我应该将每行中的 num 都存储到数据结构数组中。例如,我们可以在第二个文件中看到 num "1" 的 ID 为 "0",所以我需要存储:
1 1217907
1 1217908
1 1517737
1 2
从我的第一个文件到数据结构数组。数字“2”的 ID 为“1”,但数字“3”的 ID 为“0”,数字“4”的 ID 为“1”,因此需要存储:2 3,但不要从我的第一个文件中存储 2 4。这就是为什么我需要使用数组来存储这两个文件。如果我使用两个数组来存储它们,我可以在数组属于第二个文件中快速检查这个num的ID是否为“0”,因为使用数组可以快速定位特定数据,索引可以直接是num的值。
【问题讨论】:
-
“没有足够的连续内存空间”真的没有意义。现代操作系统使用比物理内存大得多的虚拟内存空间。即使您没有足够的物理内存,也没有关系。
-
即使文件是20G?
-
我的大多数同学都未能分配足够的连续内存空间。他们告诉我他们的程序在用于测试他们程序的计算机上崩溃了。他们说电脑太旧了,没有足够的内存空间......
-
如果是32位平台,那我可以看到。
-
这次他们应该使用64位平台来测试我们的程序,但是在程序中我们需要大约8个数组来存储数据,每个数组存储不同种类的数据。