
- C程式設計教程
- C語言 - 首頁
- C語言基礎
- C語言 - 概述
- C語言 - 特性
- C語言 - 歷史
- C語言 - 環境搭建
- C語言 - 程式結構
- C語言 - Hello World
- C語言 - 編譯過程
- C語言 - 註釋
- C語言 - 詞法單元
- C語言 - 關鍵字
- C語言 - 識別符號
- C語言 - 使用者輸入
- C語言 - 基本語法
- C語言 - 資料型別
- C語言 - 變數
- C語言 - 整數提升
- C語言 - 型別轉換
- C語言 - 型別強制轉換
- C語言 - 布林值
- C語言中的常量和字面量
- C語言 - 常量
- C語言 - 字面量
- C語言 - 轉義序列
- C語言 - 格式說明符
- C語言中的運算子
- C語言 - 運算子
- C語言 - 算術運算子
- C語言 - 關係運算符
- C語言 - 邏輯運算子
- C語言 - 位運算子
- C語言 - 賦值運算子
- C語言 - 一元運算子
- C語言 - 自增和自減運算子
- C語言 - 三元運算子
- C語言 - sizeof 運算子
- C語言 - 運算子優先順序
- C語言 - 其他運算子
- C語言中的決策
- C語言 - 決策
- C語言 - if 語句
- C語言 - if...else 語句
- C語言 - 巢狀 if 語句
- C語言 - switch 語句
- C語言 - 巢狀 switch 語句
- C語言中的迴圈
- C語言 - 迴圈
- C語言 - while 迴圈
- C語言 - for 迴圈
- C語言 - do...while 迴圈
- C語言 - 巢狀迴圈
- C語言 - 死迴圈
- C語言 - break 語句
- C語言 - continue 語句
- C語言 - goto 語句
- C語言中的函式
- C語言 - 函式
- C語言 - 主函式
- C語言 - 按值呼叫函式
- C語言 - 按引用呼叫函式
- C語言 - 巢狀函式
- C語言 - 變參函式
- C語言 - 使用者自定義函式
- C語言 - 回撥函式
- C語言 - 返回語句
- C語言 - 遞迴
- C語言中的作用域規則
- C語言 - 作用域規則
- C語言 - 靜態變數
- C語言 - 全域性變數
- C語言中的陣列
- C語言 - 陣列
- C語言 - 陣列的特性
- C語言 - 多維陣列
- C語言 - 將陣列傳遞給函式
- C語言 - 從函式返回陣列
- C語言 - 變長陣列
- C語言中的指標
- C語言 - 指標
- C語言 - 指標和陣列
- C語言 - 指標的應用
- C語言 - 指標運算
- C語言 - 指標陣列
- C語言 - 指向指標的指標
- C語言 - 將指標傳遞給函式
- C語言 - 從函式返回指標
- C語言 - 函式指標
- C語言 - 指向陣列的指標
- C語言 - 指向結構體的指標
- C語言 - 指標鏈
- C語言 - 指標與陣列的區別
- C語言 - 字元指標和函式
- C語言 - 空指標
- C語言 - void 指標
- C語言 - 懸空指標
- C語言 - 解引用指標
- C語言 - 近指標、遠指標和巨大指標
- C語言 - 指標陣列的初始化
- C語言 - 指標與多維陣列的比較
- C語言中的字串
- C語言 - 字串
- C語言 - 字串陣列
- C語言 - 特殊字元
- C語言中的結構體和聯合體
- C語言 - 結構體
- C語言 - 結構體和函式
- C語言 - 結構體陣列
- C語言 - 自引用結構體
- C語言 - 查詢表
- C語言 - 點(.)運算子
- C語言 - 列舉(enum)
- C語言 - 結構體填充和打包
- C語言 - 巢狀結構體
- C語言 - 匿名結構體和聯合體
- C語言 - 聯合體
- C語言 - 位域
- C語言 - typedef
- C語言中的檔案處理
- C語言 - 輸入與輸出
- C語言 - 檔案I/O(檔案處理)
- C語言預處理器
- C語言 - 預處理器
- C語言 - 編譯指示
- C語言 - 預處理器運算子
- C語言 - 宏
- C語言 - 標頭檔案
- C語言中的記憶體管理
- C語言 - 記憶體管理
- C語言 - 記憶體地址
- C語言 - 儲存類別
- 其他主題
- C語言 - 錯誤處理
- C語言 - 可變引數
- C語言 - 命令執行
- C語言 - 數學函式
- C語言 - static關鍵字
- C語言 - 隨機數生成
- C語言 - 命令列引數
- C程式設計資源
- C語言 - 問答
- C語言 - 快速指南
- C語言 - 速查表
- C語言 - 有用資源
- C語言 - 討論
C語言中的命令執行
C語言中的命令執行
C語言中的命令執行用於使用C程式執行系統命令。系統命令透過使用system()函式執行,該函式是stdlib.h標頭檔案的庫函式。
使用system()函式,可以在C程式中執行Windows/Linux終端命令。
語法
以下是執行系統命令的語法:
system(char *command);
命令執行示例
以下程式碼顯示了在C語言中使用system()函式執行ls命令。
#include <stdio.h> #include<stdlib.h> #include<string.h> int main() { char cmd[10]; strcpy(cmd,"dir C:\\users\\user\\*.c"); system(cmd); return 0; }
輸出
執行程式碼並檢查其輸出:
C:\Users\user>dir *.c Volume in drive C has no label. Volume Serial Number is 7EE4-E492 Directory of C:\Users\user 04/01/2024 01:30 PM 104 add.c 04/02/2024 01:37 PM 159 add1.c 04/02/2024 01:37 PM 259 array.c 04/02/2024 01:37 PM 149 main.c 04/02/2024 01:37 PM 180 recursion.c 04/02/2024 01:37 PM 241 struct.c 04/02/2024 01:37 PM 172 voidptr.c 7 File(s) 1,264 bytes 0 Dir(s) 139,073,761,280 bytes
C語言中的exec函式族
"unistd.h"標頭檔案中引入了exec函式族。這些函式用於執行檔案,一旦呼叫,它們就會用新的程序映像替換當前程序映像。
以下是C語言中exec函式族中的函式:
- execl()函式
- execlp()函式
- execle()函式
- execv()函式
- execvp()函式
- execve()函式
1. execl()函式
execl()函式的第一個引數是可執行檔案作為其第一個引數。接下來的引數在執行時將提供給檔案。最後一個引數必須為NULL。
int execl(const char *pathname, const char *arg, ..., NULL)
示例
請看下面的例子:
#include <unistd.h> int main(void) { char *file = "/usr/bin/echo"; char *arg1 = "Hello world!"; execl(file, file, arg1, NULL); return 0; }
Linux中的echo命令透過C程式碼呼叫。
輸出
儲存、編譯和執行上述程式:
$ gcc hello.c -o hello $ ./hello Hello world!
2. execlp()函式
execlp()函式類似於execl()函式。它使用PATH環境變數來定位檔案。因此,無需提供可執行檔案的路徑。
int execlp(const char *file, const char *arg, ..., NULL)
示例
請看下面的例子:
#include <unistd.h> int main(void) { char *file = "echo"; char *arg1 = "Hello world!"; execlp(file, file, arg1, NULL); return 0; }
輸出
這裡,echo已經位於PATH環境變數中。儲存、編譯並從終端執行。
$ gcc hello.c -o hello $ ./hello Hello world!
3. execle()函式
在execle()函式中,我們可以將環境變數傳遞給函式,它將使用這些變數。其原型如下:
int execle(const char *pathname, const char *arg, ..., NULL, char *const envp[])
示例
請看下面的例子:
#include <unistd.h> int main(void) { char *file = "/usr/bin/bash"; char *arg1 = "-c"; char *arg2 = "echo $ENV1 $ENV2!"; char *const env[] = {"ENV1 = Hello", "ENV2 = World", NULL}; execle(file, file, arg1, arg2, NULL, env); return 0; }
輸出
儲存、編譯並從終端執行:
$ gcc hello.c -o hello $ ./hello Hello world!
4. execv()函式
execv()函式接收一個引數向量,這些引數將提供給可執行檔案。此外,向量的最後一個元素必須為NULL
int execv(const char *pathname, char *const argv[])
示例
請看下面的例子:
#include <unistd.h> int main(void) { char *file = "/usr/bin/echo"; char *const args[] = {"/usr/bin/echo", "Hello world!", NULL}; execv(file, args); return 0; }
輸出
儲存、編譯和執行上述程式:
$ gcc hello.c -o hello $ ./hello Hello world!
5. execvp()函式
execvp()函式具有以下語法:
int execvp(const char *file, char *const argv[])
示例
請看下面的例子:
#include <unistd.h> int main(void) { char *file = "echo"; char *const args[] = {"/usr/bin/echo", "Hello world!", NULL}; execvp(file, args); return 0; }
輸出
儲存、編譯和執行上述程式:
$ gcc hello.c -o hello $ ./hello Hello world!
6. execve()函式
除了環境變數之外,我們還可以將其他引數作為NULL終止的向量傳遞給execve()函式:
int execve(const char *pathname, char *const argv[], char *const envp[])
示例
請看下面的例子:
#include <unistd.h> int main(void) { char *file = "/usr/bin/bash"; char *const args[] = {"/usr/bin/bash", "-c", "echo Hello $ENV!", NULL}; char *const env[] = {"ENV=World", NULL}; execve(file, args, env); return 0; }
輸出
儲存、編譯和執行上述程式:
$ gcc hello.c -o hello $ ./hello Hello world!
廣告