本文整理汇总了C++中slurm_strerror函数 的典型用法代码示例。如果您正苦于以下问题:C++ slurm_strerror函数的具体用法?C++ slurm_strerror怎么用?C++ slurm_strerror使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了slurm_strerror函数 的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: sacctmgr_archive_dump
extern int sacctmgr_archive_dump(int argc, char *argv[])
{
int rc = SLURM_SUCCESS;
slurmdb_archive_cond_t *arch_cond =
xmalloc(sizeof(slurmdb_archive_cond_t));
int i=0;
struct stat st;
for (i=0; i<argc; i++) {
int command_len = strlen(argv[i]);
if (!strncasecmp (argv[i], "Where", MAX(command_len, 5))
|| !strncasecmp (argv[i], "Set", MAX(command_len, 3)))
i++;
_set_cond(&i, argc, argv, arch_cond);
}
if (!arch_cond->purge_event)
arch_cond->purge_event = NO_VAL;
if (!arch_cond->purge_job)
arch_cond->purge_job = NO_VAL;
if (!arch_cond->purge_resv)
arch_cond->purge_resv = NO_VAL;
if (!arch_cond->purge_step)
arch_cond->purge_step = NO_VAL;
if (!arch_cond->purge_suspend)
arch_cond->purge_suspend = NO_VAL;
if (exit_code) {
slurmdb_destroy_archive_cond(arch_cond);
return SLURM_ERROR;
}
if (arch_cond->archive_dir) {
if (stat(arch_cond->archive_dir, &st) < 0) {
exit_code = errno;
fprintf(stderr, " dump: Failed to stat %s: %m\n "
"Note: For archive dump, "
"the directory must be on "
"the calling host.\n",
arch_cond->archive_dir);
return SLURM_ERROR;
}
if (!(st.st_mode & S_IFDIR)) {
errno = EACCES;
fprintf(stderr, " dump: "
"archive dir %s isn't a directory\n",
arch_cond->archive_dir);
return SLURM_ERROR;
}
if (access(arch_cond->archive_dir, W_OK) < 0) {
errno = EACCES;
fprintf(stderr, " dump: "
"archive dir %s is not writable\n",
arch_cond->archive_dir);
return SLURM_ERROR;
}
}
if (arch_cond->archive_script) {
if (stat(arch_cond->archive_script, &st) < 0) {
exit_code = errno;
fprintf(stderr, " dump: Failed to stat %s: %m\n "
"Note: For archive dump, the script must be on "
"the calling host.\n",
arch_cond->archive_script);
return SLURM_ERROR;
}
if (!(st.st_mode & S_IFREG)) {
errno = EACCES;
fprintf(stderr, " dump: "
"archive script %s isn't a regular file\n",
arch_cond->archive_script);
return SLURM_ERROR;
}
if (access(arch_cond->archive_script, X_OK) < 0) {
errno = EACCES;
fprintf(stderr, " dump: "
"archive script %s is not executable\n",
arch_cond->archive_script);
return SLURM_ERROR;
}
}
rc = jobacct_storage_g_archive(db_conn, arch_cond);
if (rc == SLURM_SUCCESS) {
if (commit_check("Would you like to commit changes?")) {
acct_storage_g_commit(db_conn, 1);
} else {
printf(" Changes Discarded\n");
acct_storage_g_commit(db_conn, 0);
}
} else {
exit_code=1;
fprintf(stderr, " Problem dumping archive: %s\n",
slurm_strerror(rc));
rc = SLURM_ERROR;
}
//.........这里部分代码省略.........
开发者ID:BYUHPC, 项目名称:slurm, 代码行数:101, 代码来源:archive_functions.c
示例2: specific_info_resv
extern void specific_info_resv(popup_info_t *popup_win)
{
int resv_error_code = SLURM_SUCCESS;
static reserve_info_msg_t *resv_info_ptr = NULL;
static reserve_info_t *resv_ptr = NULL;
specific_info_t *spec_info = popup_win->spec_info;
sview_search_info_t *search_info = spec_info->search_info;
char error_char[100];
GtkWidget *label = NULL;
GtkTreeView *tree_view = NULL;
List resv_list = NULL;
List send_resv_list = NULL;
sview_resv_info_t *sview_resv_info_ptr = NULL;
int j=0, i=-1;
hostset_t hostset = NULL;
ListIterator itr = NULL;
if (!spec_info->display_widget) {
setup_popup_info(popup_win, display_data_resv, SORTID_CNT);
}
if (spec_info->display_widget && popup_win->toggled) {
gtk_widget_destroy(spec_info->display_widget);
spec_info->display_widget = NULL;
goto display_it;
}
if ((resv_error_code =
get_new_info_resv(&resv_info_ptr, popup_win->force_refresh))
== SLURM_NO_CHANGE_IN_DATA) {
if (!spec_info->display_widget || spec_info->view == ERROR_VIEW)
goto display_it;
} else if (resv_error_code != SLURM_SUCCESS) {
if (spec_info->view == ERROR_VIEW)
goto end_it;
spec_info->view = ERROR_VIEW;
if (spec_info->display_widget)
gtk_widget_destroy(spec_info->display_widget);
sprintf(error_char, "get_new_info_resv: %s",
slurm_strerror(slurm_get_errno()));
label = gtk_label_new(error_char);
gtk_table_attach_defaults(popup_win->table,
label,
0, 1, 0, 1);
gtk_widget_show(label);
spec_info->display_widget = gtk_widget_ref(label);
goto end_it;
}
display_it:
resv_list = _create_resv_info_list(resv_info_ptr);
if (!resv_list)
return;
if (spec_info->view == ERROR_VIEW && spec_info->display_widget) {
gtk_widget_destroy(spec_info->display_widget);
spec_info->display_widget = NULL;
}
if (spec_info->type != INFO_PAGE && !spec_info->display_widget) {
tree_view = create_treeview(local_display_data,
&popup_win->grid_button_list);
gtk_tree_selection_set_mode(
gtk_tree_view_get_selection(tree_view),
GTK_SELECTION_MULTIPLE);
spec_info->display_widget =
gtk_widget_ref(GTK_WIDGET(tree_view));
gtk_table_attach_defaults(popup_win->table,
GTK_WIDGET(tree_view),
0, 1, 0, 1);
/* since this function sets the model of the tree_view
to the treestore we don't really care about
the return value */
create_treestore(tree_view, popup_win->display_data,
SORTID_CNT, SORTID_TIME_START, SORTID_COLOR);
}
setup_popup_grid_list(popup_win);
spec_info->view = INFO_VIEW;
if (spec_info->type == INFO_PAGE) {
_display_info_resv(resv_list, popup_win);
goto end_it;
}
/* just linking to another list, don't free the inside, just
the list */
send_resv_list = list_create(NULL);
itr = list_iterator_create(resv_list);
i = -1;
while ((sview_resv_info_ptr = list_next(itr))) {
i++;
resv_ptr = sview_resv_info_ptr->resv_ptr;
switch(spec_info->type) {
case PART_PAGE:
case BLOCK_PAGE:
case NODE_PAGE:
if (!resv_ptr->node_list)
continue;
//.........这里部分代码省略.........
开发者ID:lipari, 项目名称:slurm, 代码行数:101, 代码来源:resv_info.c
示例3: _cancel_job_id
static void *
_cancel_job_id (void *ci)
{
int error_code = SLURM_SUCCESS, i;
job_cancel_info_t *cancel_info = (job_cancel_info_t *)ci;
bool sig_set = true;
uint16_t flags = 0;
char *job_type = "";
DEF_TIMERS;
if (cancel_info->sig == (uint16_t) NO_VAL) {
cancel_info->sig = SIGKILL;
sig_set = false;
}
if (opt.batch) {
flags |= KILL_JOB_BATCH;
job_type = "batch ";
}
if (opt.full) {
flags |= KILL_FULL_JOB;
job_type = "full ";
}
if (cancel_info->array_flag)
flags |= KILL_JOB_ARRAY;
if (!cancel_info->job_id_str) {
if (cancel_info->array_job_id &&
(cancel_info->array_task_id == INFINITE)) {
xstrfmtcat(cancel_info->job_id_str, "%u_*",
cancel_info->array_job_id);
} else if (cancel_info->array_job_id) {
xstrfmtcat(cancel_info->job_id_str, "%u_%u",
cancel_info->array_job_id,
cancel_info->array_task_id);
} else {
xstrfmtcat(cancel_info->job_id_str, "%u",
cancel_info->job_id);
}
}
if (!sig_set) {
verbose("Terminating %sjob %s", job_type,
cancel_info->job_id_str);
} else {
verbose("Signal %u to %sjob %s", cancel_info->sig, job_type,
cancel_info->job_id_str);
}
for (i = 0; i < MAX_CANCEL_RETRY; i++) {
_add_delay();
START_TIMER;
error_code = slurm_kill_job2(cancel_info->job_id_str,
cancel_info->sig, flags);
END_TIMER;
slurm_mutex_lock(&max_delay_lock);
max_resp_time = MAX(max_resp_time, DELTA_TIMER);
slurm_mutex_unlock(&max_delay_lock);
if ((error_code == 0) ||
(errno != ESLURM_TRANSITION_STATE_NO_UPDATE))
break;
verbose("Job is in transistional state, retrying");
sleep(5 + i);
}
if (error_code) {
error_code = slurm_get_errno();
if ((opt.verbose > 0) ||
((error_code != ESLURM_ALREADY_DONE) &&
(error_code != ESLURM_INVALID_JOB_ID))) {
error("Kill job error on job id %s: %s",
cancel_info->job_id_str,
slurm_strerror(slurm_get_errno()));
}
if (((error_code == ESLURM_ALREADY_DONE) ||
(error_code == ESLURM_INVALID_JOB_ID)) &&
(cancel_info->sig == SIGKILL)) {
error_code = 0; /* Ignore error if job done */
}
}
/* Purposely free the struct passed in here, so the caller doesn't have
* to keep track of it, but don't destroy the mutex and condition
* variables contained. */
slurm_mutex_lock(cancel_info->num_active_threads_lock);
*(cancel_info->rc) = MAX(*(cancel_info->rc), error_code);
(*(cancel_info->num_active_threads))--;
slurm_cond_signal(cancel_info->num_active_threads_cond);
slurm_mutex_unlock(cancel_info->num_active_threads_lock);
xfree(cancel_info->job_id_str);
xfree(cancel_info);
return NULL;
}
开发者ID:adammoody, 项目名称:slurm, 代码行数:93, 代码来源:scancel.c
示例4: sacctmgr_modify_qos
extern int sacctmgr_modify_qos(int argc, char *argv[])
{
int rc = SLURM_SUCCESS;
slurmdb_qos_cond_t *qos_cond = xmalloc(sizeof(slurmdb_qos_cond_t));
slurmdb_qos_rec_t *qos = xmalloc(sizeof(slurmdb_qos_rec_t));
int i=0;
int cond_set = 0, rec_set = 0, set = 0;
List ret_list = NULL;
slurmdb_init_qos_rec(qos, 0, NO_VAL);
for (i=0; i<argc; i++) {
int command_len = strlen(argv[i]);
if (!strncasecmp(argv[i], "Where", MAX(command_len, 5))) {
i++;
cond_set += _set_cond(&i, argc, argv, qos_cond, NULL);
} else if (!strncasecmp(argv[i], "Set", MAX(command_len, 3))) {
i++;
rec_set += _set_rec(&i, argc, argv, NULL, qos);
} else {
cond_set += _set_cond(&i, argc, argv, qos_cond, NULL);
}
}
if (exit_code) {
slurmdb_destroy_qos_cond(qos_cond);
slurmdb_destroy_qos_rec(qos);
return SLURM_ERROR;
} else if (!rec_set) {
exit_code=1;
fprintf(stderr, " You didn't give me anything to set\n");
slurmdb_destroy_qos_cond(qos_cond);
slurmdb_destroy_qos_rec(qos);
return SLURM_ERROR;
} else if (!cond_set) {
if (!commit_check("You didn't set any conditions with 'WHERE'.\n"
"Are you sure you want to continue?")) {
printf("Aborted\n");
slurmdb_destroy_qos_cond(qos_cond);
slurmdb_destroy_qos_rec(qos);
return SLURM_SUCCESS;
}
}
// Special case: reset raw usage only
if (qos->usage) {
rc = SLURM_ERROR;
if (qos->usage->usage_raw == 0.0)
rc = sacctmgr_remove_qos_usage(qos_cond);
else
error("Raw usage can only be set to 0 (zero)");
slurmdb_destroy_qos_cond(qos_cond);
slurmdb_destroy_qos_rec(qos);
return rc;
}
notice_thread_init();
ret_list = acct_storage_g_modify_qos(db_conn, my_uid, qos_cond, qos);
if (ret_list && list_count(ret_list)) {
char *object = NULL;
ListIterator itr = list_iterator_create(ret_list);
printf(" Modified qos...\n");
while((object = list_next(itr))) {
printf(" %s\n", object);
}
list_iterator_destroy(itr);
set = 1;
} else if (ret_list) {
printf(" Nothing modified\n");
rc = SLURM_ERROR;
} else {
exit_code=1;
fprintf(stderr, " Error with request: %s\n",
slurm_strerror(errno));
rc = SLURM_ERROR;
}
if (ret_list)
list_destroy(ret_list);
notice_thread_fini();
if (set) {
if (commit_check("Would you like to commit changes?"))
acct_storage_g_commit(db_conn, 1);
else {
printf(" Changes Discarded\n");
acct_storage_g_commit(db_conn, 0);
}
}
slurmdb_destroy_qos_cond(qos_cond);
slurmdb_destroy_qos_rec(qos);
return rc;
}
开发者ID:bingzhang, 项目名称:slurm, 代码行数:99, 代码来源:qos_functions.c
示例5: slurm_allocate_resources_blocking
//.........这里部分代码省略.........
slurm_msg_t_init(&req_msg);
slurm_msg_t_init(&resp_msg);
/* make a copy of the user's job description struct so that we
* can make changes before contacting the controller */
req = (job_desc_msg_t *)xmalloc(sizeof(job_desc_msg_t));
if (req == NULL)
return NULL;
memcpy(req, user_req, sizeof(job_desc_msg_t));
/*
* set Node and session id for this request
*/
if (req->alloc_sid == NO_VAL)
req->alloc_sid = getsid(0);
if (user_req->alloc_node != NULL) {
req->alloc_node = xstrdup(user_req->alloc_node);
} else if ((hostname = xshort_hostname()) != NULL) {
req->alloc_node = hostname;
} else {
error("Could not get local hostname,"
" forcing immediate allocation mode.");
req->immediate = 1;
}
if (!req->immediate) {
listen = _create_allocation_response_socket(hostname);
if (listen == NULL) {
xfree(req);
return NULL;
}
req->alloc_resp_port = listen->port;
}
req_msg.msg_type = REQUEST_RESOURCE_ALLOCATION;
req_msg.data = req;
rc = slurm_send_recv_controller_msg(&req_msg, &resp_msg);
if (rc == SLURM_SOCKET_ERROR) {
int errnum = errno;
destroy_forward(&req_msg.forward);
destroy_forward(&resp_msg.forward);
if (!req->immediate)
_destroy_allocation_response_socket(listen);
xfree(req);
errno = errnum;
return NULL;
}
switch (resp_msg.msg_type) {
case RESPONSE_SLURM_RC:
if (_handle_rc_msg(&resp_msg) < 0) {
/* will reach this when the allocation fails */
errnum = errno;
} else {
/* shouldn't get here */
errnum = -1;
}
break;
case RESPONSE_RESOURCE_ALLOCATION:
/* Yay, the controller has acknowledged our request! But did
we really get an allocation yet? */
resp = (resource_allocation_response_msg_t *) resp_msg.data;
if (resp->node_cnt > 0) {
/* yes, allocation has been granted */
errno = SLURM_PROTOCOL_SUCCESS;
} else if (!req->immediate) {
if (resp->error_code != SLURM_SUCCESS)
info("%s", slurm_strerror(resp->error_code));
/* no, we need to wait for a response */
job_id = resp->job_id;
slurm_free_resource_allocation_response_msg(resp);
if (pending_callback != NULL)
pending_callback(job_id);
resp = _wait_for_allocation_response(job_id, listen,
timeout);
/* If NULL, we didn't get the allocation in
the time desired, so just free the job id */
if ((resp == NULL) && (errno != ESLURM_ALREADY_DONE)) {
errnum = errno;
slurm_complete_job(job_id, -1);
}
}
break;
default:
errnum = SLURM_UNEXPECTED_MSG_ERROR;
resp = NULL;
}
destroy_forward(&req_msg.forward);
destroy_forward(&resp_msg.forward);
if (!req->immediate)
_destroy_allocation_response_socket(listen);
xfree(req);
errno = errnum;
return resp;
}
开发者ID:VURM, 项目名称:slurm, 代码行数:101, 代码来源:allocate.c
示例6: sacctmgr_add_account
//.........这里部分代码省略.........
if (acct)
list_append(acct->assoc_list, assoc);
else
list_append(assoc_list, assoc);
xstrfmtcat(assoc_str,
" A = %-10.10s"
" C = %-10.10s\n",
assoc->acct,
assoc->cluster);
}
list_iterator_destroy(itr_c);
}
list_iterator_destroy(itr);
FREE_NULL_LIST(local_account_list);
FREE_NULL_LIST(local_assoc_list);
if (!list_count(acct_list) && !list_count(assoc_list)) {
printf(" Nothing new added.\n");
rc = SLURM_ERROR;
goto end_it;
} else if (!assoc_str) {
exit_code=1;
fprintf(stderr, " No associations created.\n");
goto end_it;
}
if (acct_str) {
printf(" Adding Account(s)\n%s", acct_str);
printf(" Settings\n");
if (start_acct->description)
printf(" Description = %s\n",
start_acct->description);
else
printf(" Description = %s\n", "Account Name");
if (start_acct->organization)
printf(" Organization = %s\n",
start_acct->organization);
else
printf(" Organization = %s\n",
"Parent/Account Name");
xfree(acct_str);
}
if (assoc_str) {
printf(" Associations\n%s", assoc_str);
xfree(assoc_str);
}
if (limit_set) {
printf(" Settings\n");
sacctmgr_print_assoc_limits(start_assoc);
}
notice_thread_init();
if (list_count(acct_list))
rc = slurmdb_accounts_add(db_conn, acct_list);
if (rc == SLURM_SUCCESS) {
if (list_count(assoc_list))
rc = slurmdb_associations_add(db_conn, assoc_list);
} else {
exit_code=1;
fprintf(stderr, " Problem adding accounts: %s\n",
slurm_strerror(rc));
rc = SLURM_ERROR;
notice_thread_fini();
goto end_it;
}
notice_thread_fini();
if (rc == SLURM_SUCCESS) {
if (commit_check("Would you like to commit changes?")) {
slurmdb_connection_commit(db_conn, 1);
} else {
printf(" Changes Discarded\n");
slurmdb_connection_commit(db_conn, 0);
}
} else {
exit_code=1;
fprintf(stderr,
" error: Problem adding account associations: %s\n",
slurm_strerror(rc));
rc = SLURM_ERROR;
}
end_it:
FREE_NULL_LIST(name_list);
FREE_NULL_LIST(cluster_list);
FREE_NULL_LIST(acct_list);
FREE_NULL_LIST(assoc_list);
slurmdb_destroy_assoc_rec(start_assoc);
slurmdb_destroy_account_rec(start_acct);
return rc;
}
开发者ID:cread, 项目名称:slurm, 代码行数:101, 代码来源:account_functions.c
示例7: sacctmgr_delete_qos
extern int sacctmgr_delete_qos(int argc, char *argv[])
{
int rc = SLURM_SUCCESS;
slurmdb_qos_cond_t *qos_cond =
xmalloc(sizeof(slurmdb_qos_cond_t));
int i=0;
List ret_list = NULL;
int set = 0;
for (i=0; i<argc; i++) {
int command_len = strlen(argv[i]);
if (!strncasecmp (argv[i], "Where", MAX(command_len, 5))
|| !strncasecmp (argv[i], "Set", MAX(command_len, 3)))
i++;
set += _set_cond(&i, argc, argv, qos_cond, NULL);
}
if (!set) {
exit_code=1;
fprintf(stderr,
" No conditions given to remove, not executing.\n");
slurmdb_destroy_qos_cond(qos_cond);
return SLURM_ERROR;
} else if (set == -1) {
slurmdb_destroy_qos_cond(qos_cond);
return SLURM_ERROR;
}
if (!g_qos_list)
g_qos_list = acct_storage_g_get_qos(
db_conn, my_uid, NULL);
notice_thread_init();
ret_list = acct_storage_g_remove_qos(db_conn, my_uid, qos_cond);
notice_thread_fini();
slurmdb_destroy_qos_cond(qos_cond);
if (ret_list && list_count(ret_list)) {
char *object = NULL;
ListIterator itr = NULL;
/* Check to see if person is trying to remove a default
* qos of an association. _isdefault only works with the
* output from acct_storage_g_remove_qos, and
* with a previously got g_qos_list.
*/
if (_isdefault(ret_list)) {
exit_code=1;
fprintf(stderr, " Please either remove the qos' listed "
"above from list and resubmit,\n"
" or change the default qos to "
"remove the qos.\n"
" Changes Discarded\n");
acct_storage_g_commit(db_conn, 0);
goto end_it;
}
itr = list_iterator_create(ret_list);
printf(" Deleting QOS(s)...\n");
while((object = list_next(itr))) {
printf(" %s\n", object);
}
list_iterator_destroy(itr);
if (commit_check("Would you like to commit changes?")) {
acct_storage_g_commit(db_conn, 1);
} else {
printf(" Changes Discarded\n");
acct_storage_g_commit(db_conn, 0);
}
} else if (ret_list) {
printf(" Nothing deleted\n");
rc = SLURM_ERROR;
} else {
exit_code=1;
fprintf(stderr, " Error with request: %s\n",
slurm_strerror(errno));
rc = SLURM_ERROR;
}
end_it:
if (ret_list)
list_destroy(ret_list);
return rc;
}
开发者ID:bingzhang, 项目名称:slurm, 代码行数:86, 代码来源:qos_functions.c
示例8: _admin_front_end
static void _admin_front_end(GtkTreeModel *model, GtkTreeIter *iter, char *type,
char *node_list)
{
uint16_t state = NO_VAL16;
update_front_end_msg_t front_end_update_msg;
char *new_type = NULL, *reason = NULL;
char tmp_char[100];
char *lower;
int rc;
GtkWidget *label = NULL;
GtkWidget *entry = NULL;
GtkWidget *popup = NULL;
if (cluster_flags & CLUSTER_FLAG_FED) {
display_fed_disabled_popup(type);
global_entry_changed = 0;
return;
}
popup = gtk_dialog_new_with_buttons(
type,
GTK_WINDOW(main_window),
GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
NULL);
gtk_window_set_type_hint(GTK_WINDOW(popup),
GDK_WINDOW_TYPE_HINT_NORMAL);
gtk_window_set_transient_for(GTK_WINDOW(popup), NULL);
label = gtk_dialog_add_button(GTK_DIALOG(popup),
GTK_STOCK_YES, GTK_RESPONSE_OK);
gtk_window_set_default(GTK_WINDOW(popup), label);
gtk_dialog_add_button(GTK_DIALOG(popup),
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL);
if (!xstrncasecmp("Drain", type, 5)) {
new_type = "DRAIN";
reason = "\n\nPlease enter reason.";
state = NODE_STATE_DRAIN;
entry = create_entry();
} else if (!xstrncasecmp("Resume", type, 6)) {
new_type = "RESUME";
reason = "";
state = NODE_RESUME;
}
snprintf(tmp_char, sizeof(tmp_char),
"Are you sure you want to set state of front end node %s "
"to %s?%s", node_list, new_type, reason);
label = gtk_label_new(tmp_char);
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(popup)->vbox),
label, false, false, 0);
if (entry)
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(popup)->vbox),
entry, true, true, 0);
gtk_widget_show_all(popup);
rc = gtk_dialog_run (GTK_DIALOG(popup));
slurm_init_update_front_end_msg(&front_end_update_msg);
if (rc == GTK_RESPONSE_OK) {
front_end_update_msg.name = node_list;
front_end_update_msg.node_state = state;
if (entry) {
front_end_update_msg.reason = xstrdup(
gtk_entry_get_text(GTK_ENTRY(entry)));
if (!front_end_update_msg.reason ||
!strlen(front_end_update_msg.reason)) {
lower = g_strdup_printf(
"You need a reason to do that.");
display_edit_note(lower);
g_free(lower);
goto end_it;
}
rc = uid_from_string(getlogin(),
&front_end_update_msg.reason_uid);
if (rc < 0)
front_end_update_msg.reason_uid = getuid();
}
rc = slurm_update_front_end(&front_end_update_msg);
if (rc == SLURM_SUCCESS) {
lower = g_strdup_printf(
"Nodes %s updated successfully.",
node_list);
display_edit_note(lower);
g_free(lower);
} else {
lower = g_strdup_printf(
"Problem updating nodes %s: %s",
node_list, slurm_strerror(rc));
display_edit_note(lower);
g_free(lower);
}
}
end_it:
global_entry_changed = 0;
xfree(front_end_update_msg.reason);
//.........这里部分代码省略.........
开发者ID:miguelgila, 项目名称:slurm, 代码行数:101, 代码来源:front_end_info.c
示例9: get_info_front_end
extern void get_info_front_end(GtkTable *table, display_data_t *display_data)
{
int error_code = SLURM_SUCCESS;
List info_list = NULL;
static int view = -1;
static front_end_info_msg_t *front_end_info_ptr = NULL;
char error_char[100];
GtkWidget *label = NULL;
GtkTreeView *tree_view = NULL;
static GtkWidget *display_widget = NULL;
int changed = 1, j;
ListIterator itr = NULL;
GtkTreePath *path = NULL;
static bool set_opts = false;
if (!set_opts)
set_page_opts(FRONT_END_PAGE, display_data_front_end,
SORTID_CNT, _initial_page_opts);
set_opts = true;
/* reset */
if (!table && !display_data) {
if (display_widget)
gtk_widget_destroy(display_widget);
display_widget = NULL;
front_end_info_ptr = NULL;
goto reset_curs;
}
if (display_data)
local_display_data = display_data;
if (!table) {
display_data_front_end->set_menu = local_display_data->set_menu;
goto reset_curs;
}
if (cluster_flags & CLUSTER_FLAG_FED) {
view = ERROR_VIEW;
if (display_widget)
gtk_widget_destroy(display_widget);
label = gtk_label_new("Not available in a federated view");
gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 0, 1);
gtk_widget_show(label);
display_widget = gtk_widget_ref(label);
goto end_it;
}
if (display_widget && toggled) {
gtk_widget_destroy(display_widget);
display_widget = NULL;
goto display_it;
}
error_code = get_new_info_front_end(&front_end_info_ptr, force_refresh);
if (error_code == SLURM_NO_CHANGE_IN_DATA) {
changed = 0;
} else if (error_code != SLURM_SUCCESS) {
if (view == ERROR_VIEW)
goto end_it;
if (display_widget)
gtk_widget_destroy(display_widget);
view = ERROR_VIEW;
sprintf(error_char, "slurm_load_front_end: %s",
slurm_strerror(slurm_get_errno()));
label = gtk_label_new(error_char);
gtk_table_attach_defaults(table, label, 0, 1, 0, 1);
gtk_widget_show(label);
display_widget = gtk_widget_ref(GTK_WIDGET(label));
goto end_it;
}
display_it:
info_list = _create_front_end_info_list(front_end_info_ptr, changed);
if (!info_list)
goto reset_curs;
/* set up the grid */
if (display_widget && GTK_IS_TREE_VIEW(display_widget) &&
gtk_tree_selection_count_selected_rows(
gtk_tree_view_get_selection(
GTK_TREE_VIEW(display_widget)))) {
GtkTreeViewColumn *focus_column = NULL;
/* highlight the correct nodes from the last selection */
gtk_tree_view_get_cursor(GTK_TREE_VIEW(display_widget),
&path, &focus_column);
}
if (!path) {
sview_front_end_info_t *fe_ptr;
itr = list_iterator_create(info_list);
while ((fe_ptr = list_next(itr))) {
j = 0;
while (fe_ptr->node_inx[j] >= 0) {
change_grid_color(grid_button_list,
fe_ptr->node_inx[j],
fe_ptr->node_inx[j+1],
fe_ptr->color_inx,
true, 0);
j += 2;
}
}
list_iterator_destroy(itr);
change_grid_color(grid_button_list, -1, -1,
//.........这里部分代码省略.........
开发者ID:miguelgila, 项目名称:slurm, 代码行数:101, 代码来源:front_end_info.c
示例10: sacctmgr_list_txn
extern int sacctmgr_list_txn(int argc, char *argv[])
{
int rc = SLURM_SUCCESS;
slurmdb_txn_cond_t *txn_cond = xmalloc(sizeof(slurmdb_txn_cond_t));
List txn_list = NULL;
slurmdb_txn_rec_t *txn = NULL;
int i=0;
ListIterator itr = NULL;
ListIterator itr2 = NULL;
int field_count = 0;
print_field_t *field = NULL;
List format_list = list_create(slurm_destroy_char);
List print_fields_list; /* types are of print_field_t */
for (i=0; i<argc; i++) {
int command_len = strlen(argv[i]);
if (!strncasecmp (argv[i], "Where", MAX(command_len, 5))
|| !strncasecmp (argv[i], "Set", MAX(command_len, 3)))
i++;
_set_cond(&i, argc, argv, txn_cond, format_list);
}
if (exit_code) {
slurmdb_destroy_txn_cond(txn_cond);
list_destroy(format_list);
return SLURM_ERROR;
}
if (!list_count(format_list)) {
slurm_addto_char_list(format_list, "T,Action,Actor,Where,Info");
if (txn_cond->with_assoc_info)
slurm_addto_char_list(format_list,
"User,Account,Cluster");
}
print_fields_list = sacctmgr_process_format_list(format_list);
list_destroy(format_list);
if (exit_code) {
list_destroy(print_fields_list);
return SLURM_ERROR;
}
txn_list = acct_storage_g_get_txn(db_conn, my_uid, txn_cond);
slurmdb_destroy_txn_cond(txn_cond);
if (!txn_list) {
exit_code=1;
fprintf(stderr, " Error with request: %s\n",
slurm_strerror(errno));
list_destroy(print_fields_list);
return SLURM_ERROR;
}
itr = list_iterator_create(txn_list);
itr2 = list_iterator_create(print_fields_list);
print_fields_header(print_fields_list);
field_count = list_count(print_fields_list);
while((txn = list_next(itr))) {
int curr_inx = 1;
while((field = list_next(itr2))) {
switch(field->type) {
case PRINT_ACCT:
field->print_routine(field, txn->accts,
(curr_inx == field_count));
break;
case PRINT_ACTIONRAW:
field->print_routine(
field,
txn->action,
(curr_inx == field_count));
break;
case PRINT_ACTION:
field->print_routine(
field,
slurmdbd_msg_type_2_str(txn->action,
0),
(curr_inx == field_count));
break;
case PRINT_ACTOR:
field->print_routine(field,
txn->actor_name,
(curr_inx == field_count));
break;
case PRINT_CLUSTER:
field->print_routine(field, txn->clusters,
(curr_inx == field_count));
break;
case PRINT_ID:
field->print_routine(field,
txn->id,
(curr_inx == field_count));
break;
case PRINT_INFO:
field->print_routine(field,
txn->set_info,
(curr_inx == field_count));
//.........这里部分代码省略.........
开发者ID:BYUHPC, 项目名称:slurm, 代码行数:101, 代码来源:txn_functions.c
示例11: slurm_job_step_get_pids
/*
* slurm_job_step_get_pids - get the complete list of pids for a given
* job step
*
* IN job_id
* IN step_id
* IN node_list, optional, if NULL then all nodes in step are returned.
* OUT resp
* RET SLURM_SUCCESS on success SLURM_ERROR else
*/
extern int slurm_job_step_get_pids(uint32_t job_id, uint32_t step_id,
char *node_list,
job_step_pids_response_msg_t **resp)
{
int rc = SLURM_SUCCESS;
slurm_msg_t req_msg;
job_step_id_msg_t req;
ListIterator itr;
List ret_list = NULL;
ret_data_info_t *ret_data_info = NULL;
slurm_step_layout_t *step_layout = NULL;
job_step_pids_response_msg_t *resp_out;
bool created = 0;
xassert(resp);
if (!node_list) {
if (!(step_layout =
slurm_job_step_layout_get(job_id, step_id))) {
rc = errno;
error("slurm_job_step_get_pids: "
"problem getting step_layout for %u.%u: %s",
job_id, step_id, slurm_strerror(rc));
return rc;
}
node_list = step_layout->node_list;
}
if (!*resp) {
resp_out = xmalloc(sizeof(job_step_pids_response_msg_t));
*resp = resp_out;
created = 1;
} else
resp_out = *resp;
debug("slurm_job_step_get_pids: "
"getting pid information of job %u.%u on nodes %s",
job_id, step_id, node_list);
slurm_msg_t_init(&req_msg);
memset(&req, 0, sizeof(job_step_id_msg_t));
resp_out->job_id = req.job_id = job_id;
resp_out->step_id = req.step_id = step_id;
req_msg.msg_type = REQUEST_JOB_STEP_PIDS;
req_msg.data = &req;
if (!(ret_list = slurm_send_recv_msgs(node_list,
&req_msg, 0, false))) {
error("slurm_job_step_get_pids: got an error no list returned");
rc = SLURM_ERROR;
if (created) {
slurm_job_step_pids_response_msg_free(resp_out);
*resp = NULL;
}
goto cleanup;
}
itr = list_iterator_create(ret_list);
while((ret_data_info = list_next(itr))) {
switch (ret_data_info->type) {
case RESPONSE_JOB_STEP_PIDS:
if (!resp_out->pid_list)
resp_out->pid_list = list_create(
slurm_free_job_step_pids);
list_push(resp_out->pid_list,
ret_data_info->data);
ret_data_info->data = NULL;
break;
case RESPONSE_SLURM_RC:
rc = slurm_get_return_code(ret_data_info->type,
ret_data_info->data);
error("slurm_job_step_get_pids: "
"there was an error with the "
"list pid request rc = %s",
slurm_strerror(rc));
break;
default:
rc = slurm_get_return_code(ret_data_info->type,
ret_data_info->data);
error("slurm_job_step_get_pids: "
"unknown return given %d rc = %s",
ret_data_info->type, slurm_strerror(rc));
break;
}
}
list_iterator_destroy(itr);
list_destroy(ret_list);
//.........这里部分代码省略.........
开发者ID:BYUHPC, 项目名称:slurm, 代码行数:101, 代码来源:job_step_info.c
示例12: job_modify_wiki
/* Modify a job:
* CMD=MODIFYJOB ARG=<jobid>
* [BANK=<name>;]
* [COMMENT=<whatever>;]
* [DEPEND=afterany:<jobid>;]
* [JOBNAME=<name>;]
* [MINSTARTTIME=<uts>;]
* [NODES=<number>;]
* [PARTITION=<name>;]
* [RFEATURES=<features>;]
* [TIMELIMT=<seconds>;]
* [VARIABLELIST=<env_vars>;]
* [GRES=<name:value>;]
* [WCKEY=<name>;]
*
* RET 0 on success, -1 on failure */
extern int job_modify_wiki(char *cmd_ptr, int *err_code, char **err_msg)
{
char *arg_ptr, *bank_ptr, *depend_ptr, *nodes_ptr, *start_ptr;
char *host_ptr, *name_ptr, *part_ptr, *time_ptr, *tmp_char;
char *comment_ptr, *feature_ptr, *env_ptr, *gres_ptr, *wckey_ptr;
int i, slurm_rc;
uint32_t jobid, new_node_cnt = 0, new_time_limit = 0;
static char reply_msg[128];
/* Locks: write job, read node and partition info */
slurmctld_lock_t job_write_lock = {
NO_LOCK, WRITE_LOCK, READ_LOCK, READ_LOCK };
arg_ptr = strstr(cmd_ptr, "ARG=");
if (arg_ptr == NULL) {
*err_code = -300;
*err_msg = "MODIFYJOB lacks ARG=";
error("wiki: MODIFYJOB lacks ARG=");
return -1;
}
/* Change all parsed "=" to ":" then search for remaining "="
* and report results as unrecognized options */
arg_ptr[3] = ':';
arg_ptr += 4;
jobid = strtoul(arg_ptr, &tmp_char, 10);
if ((tmp_char[0] != '\0') && (!isspace(tmp_char[0]))) {
*err_code = -300;
*err_msg = "Invalid ARG value";
error("wiki: MODIFYJOB has invalid jobid");
return -1;
}
bank_ptr = strstr(cmd_ptr, "BANK=");
comment_ptr = strstr(cmd_ptr, "COMMENT=");
depend_ptr = strstr(cmd_ptr, "DEPEND=");
gres_ptr = strstr(cmd_ptr, "GRES=");
host_ptr = strstr(cmd_ptr, "HOSTLIST=");
name_ptr = strstr(cmd_ptr, "JOBNAME=");
start_ptr = strstr(cmd_ptr, "MINSTARTTIME=");
nodes_ptr = strstr(cmd_ptr, "NODES=");
part_ptr = strstr(cmd_ptr, "PARTITION=");
feature_ptr = strstr(cmd_ptr, "RFEATURES=");
time_ptr = strstr(cmd_ptr, "TIMELIMIT=");
env_ptr = strstr(cmd_ptr, "VARIABLELIST=");
wckey_ptr = strstr(cmd_ptr, "WCKEY=");
if (bank_ptr) {
bank_ptr[4] = ':';
bank_ptr += 5;
null_term(bank_ptr);
}
if (comment_ptr) {
comment_ptr[7] = ':';
comment_ptr += 8;
if (comment_ptr[0] == '\"') {
comment_ptr++;
for (i=0; ; i++) {
if (comment_ptr[i] == '\0')
break;
if (comment_ptr[i] == '\"') {
comment_ptr[i] = '\0';
break;
}
}
} else if (comment_ptr[0] == '\'') {
comment_ptr++;
for (i=0; ; i++) {
if (comment_ptr[i] == '\0')
break;
if (comment_ptr[i] == '\'') {
comment_ptr[i] = '\0';
break;
}
}
} else
null_term(comment_ptr);
}
if (depend_ptr) {
depend_ptr[6] = ':';
depend_ptr += 7;
null_term(depend_ptr);
}
if (feature_ptr) {
feature_ptr[9] = ':';
feature_ptr += 10;
null_term(feature_ptr);
}
//.........这里部分代码省略.........
开发者ID:IFCA, 项目名称:slurm, 代码行数:101, 代码来源:job_modify.c
示例13: sacctmgr_archive_load
extern int sacctmgr_archive_load(int argc, char *argv[])
{
int rc = SLURM_SUCCESS;
slurmdb_archive_rec_t *arch_rec =
xmalloc(sizeof(slurmdb_archive_rec_t));
int i=0, command_len = 0;
struct stat st;
for (i=0; i<argc; i++) {
int end = parse_option_end(argv[i]);
if (!end)
command_len=strlen(argv[i]);
else {
command_len=end-1;
if (argv[i][end] == '=') {
end++;
}
}
if (!end
|| !strncasecmp (argv[i], "File", MAX(command_len, 1))) {
arch_rec->archive_file =
strip_quotes(argv[i]+end, NULL, 0);
} else if (!strncasecmp (argv[i], "Insert",
MAX(command_len, 2))) {
arch_rec->insert = strip_quotes(argv[i]+end, NULL, 1);
} else {
exit_code=1;
fprintf(stderr, " Unknown option: %s\n", argv[i]);
}
}
if (exit_code) {
slurmdb_destroy_archive_rec(arch_rec);
return SLURM_ERROR;
}
if (arch_rec->archive_file) {
char *fullpath;
char cwd[MAXPATHLEN + 1];
int mode = R_OK;
if ((getcwd(cwd, MAXPATHLEN)) == NULL)
fatal("getcwd failed: %m");
if ((fullpath = search_path(cwd, arch_rec->archive_file,
true, mode))) {
xfree(arch_rec->archive_file);
arch_rec->archive_file = fullpath;
}
if (stat(arch_rec->archive_file, &st) < 0) {
exit_code = errno;
fprintf(stderr, " load: Failed to stat %s: %m\n "
"Note: For archive load, the file must be on "
"the calling host.\n",
arch_rec->archive_file);
return SLURM_ERROR;
}
}
rc = jobacct_storage_g_archive_load(db_conn, arch_rec);
if (rc == SLURM_SUCCESS) {
if (commit_check("Would you like to commit changes?")) {
acct_storage_g_commit(db_conn, 1);
} else {
printf(" Changes Discarded\n");
acct_storage_g_commit(db_conn, 0);
}
} else {
exit_code=1;
fprintf(stderr, " Problem loading archive file: %s\n",
slurm_strerror(rc));
rc = SLURM_ERROR;
}
slurmdb_destroy_archive_rec(arch_rec);
return rc;
}
开发者ID:BYUHPC, 项目名称:slurm, 代码行数:80, 代码来源:archive_functions.c
示例14: get_job
extern void get_job(void)
{
int error_code = -1, i, recs;
static int printed_jobs = 0;
static int count = 0;
static job_info_msg_t *job_info_ptr = NULL, *new_job_ptr = NULL;
job_info_t *job_ptr = NULL;
uint16_t show_flags = 0;
bitstr_t *nodes_req = NULL;
static uint16_t last_flags = 0;
if (params.all_flag)
show_flags |= SHOW_ALL;
if (job_info_ptr) {
if (show_flags != last_flags)
job_info_ptr->last_update = 0;
error_code = slurm_load_jobs(job_info_ptr->last_update,
&new_job_ptr, show_flags);
if (error_code == SLURM_SUCCESS)
slurm_free_job_info_msg(job_info_ptr);
else if (slurm_get_errno() == SLURM_NO_CHANGE_IN_DATA) {
error_code = SLURM_SUCCESS;
new_job_ptr = job_info_ptr;
}
} else
error_code = slurm_load_jobs((time_t) NULL, &new_job_ptr,
show_flags);
last_flags = show_flags;
if (error_code) {
if (quiet_flag != 1) {
if (!params.commandline) {
mvwprintw(text_win,
main_ycord, 1,
"slurm_load_jobs: %s",
slurm_strerror(slurm_get_errno()));
main_ycord++;
} else {
printf("slurm_load_jobs: %s\n",
slurm_strerror(slurm_get_errno()));
}
}
}
if (!params.no_header)
_print_header_job();
if (new_job_ptr)
recs = new_job_ptr->record_count;
else
recs = 0;
if (!params.commandline)
if ((text_line_cnt+printed_jobs) > count)
text_line_cnt--;
printed_jobs = 0;
count = 0;
if (params.hl)
nodes_req = get_requested_node_bitmap();
for (i = 0; i < recs; i++) {
job_ptr = &(new_job_ptr->job_array[i]);
if (!IS_JOB_PENDING(job_ptr) && !IS_JOB_RUNNING(job_ptr) &&
!IS_JOB_SUSPENDED(job_ptr) && !IS_JOB_COMPLETING(job_ptr))
continue; /* job has completed */
if (nodes_req) {
int overlap = 0;
bitstr_t *loc_bitmap = bit_alloc(bit_size(nodes_req));
inx2bitstr(loc_bitmap, job_ptr->node_inx);
overlap = bit_overlap(loc_bitmap, nodes_req);
FREE_NULL_BITMAP(loc_bitmap);
if (!overlap)
continue;
}
if (job_ptr->node_inx[0] != -1) {
int j = 0;
job_ptr->num_nodes = 0;
while (job_ptr->node_inx[j] >= 0) {
job_ptr->num_nodes +=
(job_ptr->node_inx[j + 1] + 1) -
job_ptr->node_inx[j];
set_grid_inx(job_ptr->node_inx[j],
job_ptr->node_inx[j + 1], count);
j += 2;
}
if (!params.commandline) {
if ((count >= text_line_cnt) &&
(printed_jobs < (getmaxy(text_win) - 4))) {
job_ptr->num_cpus =
(int)letters[count%62];
wattron(text_win,
COLOR_PAIR(colors[count%6]));
_print_text_job(job_ptr);
wattroff(text_win,
COLOR_PAIR(colors[count%6]));
printed_jobs++;
}
} else {
//.........这里部分代码省略.........
开发者ID:jtfrey, 项目名称:slurm, 代码行数:101, 代码来源:job_functions.c
示例15: get_info_bb
extern void get_info_bb(GtkTable *table, display_data_t *display_data)
{
int error_code = SLURM_SUCCESS;
List info_list = NULL;
static int view = -1;
static burst_buffer_info_msg_t *bb_info_ptr = NULL;
char error_char[100];
GtkWidget *label = NULL;
GtkTreeView *tree_view = NULL;
static GtkWidget *display_widget = NULL;
GtkTreePath *path = NULL;
static bool set_opts = FALSE;
if (!set_opts) {
set_page_opts(BB_PAGE, display_data_bb,
SORTID_CNT, _initial_page_opts);
}
set_opts = TRUE;
/* reset */
if (!table && !display_data) {
if (display_widget)
gtk_widget_destroy(display_widget);
display_widget = NULL;
bb_info_ptr = NULL;
goto reset_curs;
}
if (display_data)
local_display_data = display_data;
if (!table) {
display_data_bb->set_menu = local_display_data->set_menu;
goto reset_curs;
}
if (display_widget && toggled) {
gtk_widget_destroy(display_widget);
display_widget = NULL;
goto display_it;
}
error_code = get_new_info_bb(&bb_info_ptr, force_refresh);
if (error_code == SLURM_NO_CHANGE_IN_DATA) {
} else if (error_code != SLURM_SUCCESS) {
if (view == ERROR_VIEW)
goto end_it;
if (display_widget)
gtk_widget_destroy(display_widget);
view = ERROR_VIEW;
sprintf(error_char, "slurm_load_reservations: %s",
slurm_strerror(slurm_get_errno()));
label = gtk_label_new(error_char);
gtk_table_attach_defaults(table, label, 0, 1, 0, 1);
gtk_widget_show(label);
display_widget = gtk_widget_ref(GTK_WIDGET(label));
goto end_it;
}
display_it:
info_list = _create_bb_info_list(bb_info_ptr);
if (!info_list) {
goto reset_curs;
}
/* set up the grid */
if (display_widget && GTK_IS_TREE_VIEW(display_widget)
&& gtk_tree_selection_count_selected_rows(
gtk_tree_view_get_selection(
GTK_TREE_VIEW(display_widget)))) {
GtkTreeViewColumn *focus_column = NULL;
/* highlight the correct nodes from the last selection */
gtk_tree_view_get_cursor(GTK_TREE_VIEW(display_widget),
&path, &focus_column);
}
change_grid_color(grid_button_list, -1, -1,
MAKE_WHITE, true, 0);
if (view == ERROR_VIEW && display_widget) {
gtk_widget_destroy(display_widget);
display_widget = NULL;
}
if (!display_widget) {
tree_view = create_treeview(local_display_data,
&grid_button_list);
gtk_tree_selection_set_mode(
gtk_tree_view_get_selection(tree_view),
GTK_SELECTION_MULTIPLE);
display_widget = gtk_widget_ref(GTK_WIDGET(tree_view));
gtk_table_attach_defaults(table,
GTK_WIDGET(tree_view),
0, 1, 0, 1);
/* since this function sets the model of the tree_view
to the treestore we don't really care about
the return value */
create_treestore(tree_view, display_data_bb,
SORTID_CNT, SORTID_NAME, SORTID_COLOR);
}
//.........这里部分代码省略.........
开发者ID:HDOD, 项目名称:slurm, 代码行数:101, 代码来源:bb_info.c
示例16: sacctmgr_delete_account
六六分期app的软件客服如何联系?不知道吗?加qq群【895510560】即可!标题:六六分期
阅读:19131| 2023-10-27
今天小编告诉大家如何处理win10系统火狐flash插件总是崩溃的问题,可能很多用户都不知
阅读:9972| 2022-11-06
今天小编告诉大家如何对win10系统删除桌面回收站图标进行设置,可能很多用户都不知道
阅读:8317| 2022-11-06
今天小编告诉大家如何对win10系统电脑设置节能降温的设置方法,想必大家都遇到过需要
阅读:8686| 2022-11-06
我们在使用xp系统的过程中,经常需要对xp系统无线网络安装向导设置进行设置,可能很多
阅读:8627| 2022-11-06
今天小编告诉大家如何处理win7系统玩cf老是与主机连接不稳定的问题,可能很多用户都不
阅读:9643| 2022-11-06
电脑对日常生活的重要性小编就不多说了,可是一旦碰到win7系统设置cf烟雾头的问题,很
阅读:8611| 2022-11-06
我们在日常使用电脑的时候,有的小伙伴们可能在打开应用的时候会遇见提示应用程序无法
阅读:7991| 2022-11-06
今天小编告诉大家如何对win7系统打开vcf文件进行设置,可能很多用户都不知道怎么对win
阅读:8642| 2022-11-06
今天小编告诉大家如何对win10系统s4开启USB调试模式进行设置,可能很多用户都不知道怎
阅读:7527| 2022-11-06
请发表评论