我正在编写一个接受系统资源名称(例如RLIMIT_NOFILE
)并为其打印一些资源限制信息的C程序。
资源常量在<sys/resource.h>
中定义,例如
#define RLIMIT_NOFILE 5
我正在寻找一种将命令行参数(例如RLIMIT_NOFILE
)映射到相应数值(例如5)的好方法。
我最初打算做类似的事情:
int resource = -1;
char *resource_names[] = {
"RLIMIT_NOFILE", "RLIMIT_NPROC", "RLIMIT_RSS"
};
for (i = 0; i < sizeof(resource_names)/sizeof(char *); i++) {
if (strcmp(argv[1], resource_names[i]) == 0) {
resource = eval(resource_names[i]);
break;
}
}
但是C似乎没有类似eval
的东西,即使那样,编译时常量在运行时也将不可用。
目前,我正在执行以下操作,但是我很好奇是否有更好的方法。
#include <stdio.h>
#include <string.h>
#include <sys/resource.h>
int main(int argc, char *argv[])
{
if (argc != 2) {
printf("Usage: %s <resource>\n", argv[0]);
return 1;
}
char *resource_names[] = {
"RLIMIT_NOFILE", "RLIMIT_NPROC", "RLIMIT_RSS"
};
int resources[] = {
RLIMIT_NOFILE, RLIMIT_NPROC, RLIMIT_RSS
};
int i, resource = -1;
for (i = 0; i < sizeof(resources)/sizeof(int); i++) {
if (strcmp(argv[1], resource_names[i]) == 0) {
resource = resources[i];
break;
}
}
if (resource == -1) {
printf("Invalid resource.\n");
return 1;
}
struct rlimit rlim;
getrlimit(resource, &rlim);
printf("%s: %ld / %ld\n", argv[1], rlim.rlim_cur, rlim.rlim_max);
return 0;
}
答案 0 :(得分:2)
html +="<td>"+vegetable[i].category+"</td>";
html +="<td>"+vegetable[i].name+"</td>";
html +="<td>"+vegetable[i].mrp+"</td>";
html +="<td>"+"<input id ='vegetable'"+i+" type=number min=0 max=10 value=0>"+"</td>";
常量都是可以用作数组索引的低值整数,或(针对您的问题)使用数组来查找索引,并且它将对应达到您想要的值。
或者您可以有一个结构数组,包含值和字符串。像
RLIMIT_x
然后很容易遍历数组并将字符串“映射”到值(或执行相反操作)。