在C語言中,system()
函數(shù)用于執(zhí)行外部命令
system()
函數(shù)返回一個整數(shù),表示外部命令的執(zhí)行狀態(tài)。通常情況下,返回值為0表示命令成功執(zhí)行,非0值表示命令執(zhí)行失敗。你可以通過檢查返回值來判斷命令是否執(zhí)行成功。例如:#include <stdlib.h>
#include <unistd.h>
int main() {
int result = system("ls");
if (result == 0) {
printf("命令執(zhí)行成功\n");
} else {
printf("命令執(zhí)行失敗,錯誤代碼:%d\n", result);
}
return 0;
}
WEXITSTATUS
宏來獲取system()
函數(shù)返回的退出狀態(tài)。WEXITSTATUS
宏是一個整數(shù)類型,它可以從<sys/wait.h>
頭文件中獲取。例如:#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
#include <stdio.h>
int main() {
int result = system("ls");
if (result == 0) {
printf("命令執(zhí)行成功\n");
} else {
int exit_status = WEXITSTATUS(result);
printf("命令執(zhí)行失敗,錯誤代碼:%d\n", exit_status);
}
return 0;
}
errno
和perror()
:當system()
函數(shù)返回非零值時,你可以使用errno
全局變量和perror()
函數(shù)來獲取更詳細的錯誤信息。errno
是一個整數(shù)類型,它表示最近的系統(tǒng)調用錯誤。perror()
函數(shù)會輸出一個描述錯誤的字符串。例如:#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <errno.h>
int main() {
int result = system("ls");
if (result == 0) {
printf("命令執(zhí)行成功\n");
} else {
perror("system()函數(shù)調用失敗");
}
return 0;
}
請注意,system()
函數(shù)可能存在安全風險,因為它允許執(zhí)行任意命令。在實際編程中,盡量避免使用system()
函數(shù),而是使用更安全的替代方案,如fork()
和exec()
系列函數(shù)。