如何创建一个正确的数组,该数组可以通过char**引用,以将参数传递给LSF-API
我想使用一个小的C包装器来访问所谓的LSF-API。LSF是“负载共享设施”,它类似于一个平台,可以在各种机器上分配计算作业(由IBM创建) 我通过填充数据结构并将其传递给LSF,了解了如何完成基本的提交工作。但是,当我试图用更多定义的属性指定这个数据结构时,我遇到了一个与基本C问题相关的问题 我想指定一个主机名列表,作业应该分派到其中。 根据API,这是通过以下两个字段完成的:如何创建一个正确的数组,该数组可以通过char**引用,以将参数传递给LSF-API,c,api,pointers,lsf,C,Api,Pointers,Lsf,我想使用一个小的C包装器来访问所谓的LSF-API。LSF是“负载共享设施”,它类似于一个平台,可以在各种机器上分配计算作业(由IBM创建) 我通过填充数据结构并将其传递给LSF,了解了如何完成基本的提交工作。但是,当我试图用更多定义的属性指定这个数据结构时,我遇到了一个与基本C问题相关的问题 我想指定一个主机名列表,作业应该分派到其中。 根据API,这是通过以下两个字段完成的: char ** askedHosts -> The array of names of invoker
char ** askedHosts -> The array of names of invoker specified candidate hosts. The number of hosts is given by numAskedHosts.
int numAskedHosts -> length of the previous array
这个char**
让我头疼:我假设,我需要创建一个以主机名为字符串的数组,指定它们的数量,并以某种方式将其传递给我的数据结构:
char *myHostArray[] = {"hostname_1","hostname_2","hostname_3"};
int numberOfMyHosts = 3;
myDatastructure.askedHosts = myHostArray;
myDatastructure.numAskedHosts = 3;
但不管我怎么做,都没用。所描述的变体是唯一一个编译至少成功并且在运行时没有“分段错误”的变体。
但最终,信息似乎无法正确传递,因为它对作业调度没有影响
我想我把指针弄乱了。
你知道我怎样才能正确通过这个数组吗?我尝试了很多变化,但下班后我没有成功
你知道我会做错什么吗
顺便说一句,这里可以找到API参考(我说的是“提交”数据结构):我希望这个例子能帮助您:
#include <stdio.h>
void func(char **args, int n) {
int i;
for (i=0; i<n; i++)
printf("%s\n", args[i]);
}
int main(void) {
char *askedHosts[] = {"hostname_1","hostname_2","hostname_3"};
int numOfHosts = 3;
func(askedHosts, numOfHosts);
}
#包括
void func(字符**args,int n){
int i;
对于(i=0;i对于任何可选参数,请求必须说明是否使用了此选项。submit
结构中的options
确实具有该标志
#define SUB_HOST 0x04
Flag to indicate numAskedHosts parameter has data.
Equivalent to bsub -m command line option existence.
你必须这样做
submit.options |= SUB_HOST;
这似乎是正确的…您确定其他地方没有问题吗?您是否在初始化时将myDataStructure
设置为零(或执行`={0};`)?代码看起来没问题;问题可能是其他问题。你检查过API调用中的错误指示器了吗?他们告诉你关于这个问题的什么?我同意其他人的看法。看过你链接到的文档后,我会说你对这两个结构成员做的事情是正确的。问题一定在其他地方。是吗ese调用异步吗?也许您需要确保在调用完成之前提供的指针参数没有超出范围?@JonathanLeffler:这只是一个可选参数,我在这里没有收到任何错误指示。我只看到,作业调度是随机完成的,而不仅仅是对提到的机器。There也是提交作业的命令行版本。类似于“askedHost”的内容可以使用可选参数-m与bsub一起传递。如果我在那里指定了一台机器,一切都正常。作业只在那里结束……函数“func”显示API将如何解释输入。最后它确认了我的“输入”方式一般来说,应该会得到正确的处理,这也是其他人所说的。但这并不能真正帮助我:)。无论如何,谢谢你的帮助confirming@and0r,你试过了吗。lsb_submit()
如果未设置SUB_HOST选项,库代码将忽略这些字段。您可以在中看到库代码。@MichaelClosson现在我尝试了它:…它工作起来很有魅力!太好了!非常感谢!!!如果我在API文档中查找此选项参数,它将声明它属于numAskedHosts参数。但是如果我只看到好了,在提交数据结构(我所做的)中,我没有找到指向该选项参数的链接…或者是我太盲目了?我想我没有足够的xp来正确使用API..有一些关于lsb_submit()的讨论在的第54页上。我认为为可选功能设置标志的目的是区分默认值不为零或空的情况。例如,SUB2_JOB_PRIORITY
默认值为-1
@MichaelClosson。链接程序员指南第57页的表格显示了有关命令行参数(busb)的良好概要,提交数据结构(API)中的字段和潜在归属选项标志。谢谢