Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何创建一个正确的数组,该数组可以通过char**引用,以将参数传递给LSF-API_C_Api_Pointers_Lsf - Fatal编程技术网

如何创建一个正确的数组,该数组可以通过char**引用,以将参数传递给LSF-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

我想使用一个小的C包装器来访问所谓的LSF-API。LSF是“负载共享设施”,它类似于一个平台,可以在各种机器上分配计算作业(由IBM创建)

我通过填充数据结构并将其传递给LSF,了解了如何完成基本的提交工作。但是,当我试图用更多定义的属性指定这个数据结构时,我遇到了一个与基本C问题相关的问题

我想指定一个主机名列表,作业应该分派到其中。 根据API,这是通过以下两个字段完成的:

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)中的字段和潜在归属选项标志。谢谢