gpt4 book ai didi

c - 如何将变量传递给 C 中的 shell 命令?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:19:56 24 4
gpt4 key购买 nike

例如,我代码:

fp = popen("wc -l < myfile", "r");

但是myfile应该是解析到该项目的任何文件的名称。它可能是文件 abc.txt123.txtxy.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的值。

最佳答案

我想,你需要利用 snprintf()首先生成要传递给 popen() 的字符串,然后您可以使用该字符串调用 popen()

伪代码

char buf[32] = {0};
snprintf(buf, 32, "wc -l < %s", myfile);
fp = popen(buf, "r");

编辑

使其适用于任何长度的 myfile

int len = strlen(myfile) + strlen("wc -l < ") + 1;
char *buf = malloc(len);
snprintf(buf, len, "wc -l < %s", myfile);
fp = popen(buf, "r");

...

free(buf);

注意:如Ed Heal in the comment所述,此处的 32 仅用于演示 目的。显然,您应该根据 myfile 包含的字符串的长度、强制字符和空终止符来选择临时数组长度。

关于c - 如何将变量传递给 C 中的 shell 命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30405898/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com