函數名: system()
用 法: int system(char *command);
原理:
? ? ? ? 創建一個子進程去加載一個新程序執行,而Linux命令基本都是一個單獨的進程實現的,所以你所掌握的Linux命令越多,該函數功能就越強大。
其原理基本就是這樣,如果想要深入了解可以去了解一下相關的函數。
(執行shell?命令)
相關函數
fork,execve,waitpid,popen??
頭文件
#include<stdlib.h>
#include <stdio.h>#include <stdlib.h>int main(void){system("ls -l");return 0;}
一下是一段通過system操控mplayer播放器的代碼,有興趣的可以自行解讀一下。
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>void *play_task(void *arg)
{FILE *fp = popen("mplayer -slave -quiet -input file=/home/gec/pipe -geometry 100:100 -zoom -x 800 -y 480 dream.avi", "r");if (fp == NULL){perror("加載播放器失敗\n");return NULL;}while (1){// 讀播放器返回的數據char buf[1024] = {0};fgets(buf, 1024, fp);if (feof(fp)){printf("播放完畢\n");break;}printf("play_msg=%s\n", buf);}pclose(fp);
};int main()
{while (1){printf("1.開始播放 2.快進 3.快退 4.獲取時間 5.退出播放\n");int n = 0;scanf("%d", &n);if (n == 1){// 結束播放system("killall mplayer");// 開啟播放器線程pthread_t tid;pthread_create(&tid, NULL, play_task, NULL);}if (n == 2){system("echo seek +10 > /home/gec/pipe");}if (n == 3){system("echo seek -10 > /home/gec/pipe");}if (n == 4){system("echo get_time_pos > /home/gec/pipe");}if (n == 5){system("killall mplayer");break;}}
}