老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業提供網站建設、域名注冊、服務器等服務

c調用linux命令,c語言實現linux命令

如何在objective-c中調用linux命令

支持版本:蘋果公司的GCC version 4.0.1

創新互聯是一家專業從事成都網站設計、做網站、網頁設計的品牌網絡公司。如今是成都地區具影響力的網站設計公司,作為專業的成都網站建設公司,創新互聯依托強大的技術實力、以及多年的網站運營經驗,為您提供專業的成都網站建設、營銷型網站建設及網站設計開發服務!

1

2

3

4

5

void runls()

{

[[NSTask launchedTaskWithLaunchPath:@"/bin/ls"

arguments:[NSArray array]] waitUntilExit];

}

如果希望調用系統命令,先執行shell:

1

2

3

4

5

void runSystemCommand(NSString *cmd)

{

[[NSTask launchedTaskWithLaunchPath:@"/bin/sh"

arguments:[NSArray arrayWithObjects:@"-c", cmd, nil]]

waitUntilExit];

linux下怎樣用c語言調用shell命令

C程序調用shell腳本共同擁有三種法子 :system()、popen()、exec系列數call_exec1.c ,

system() 不用你自己去產生進程。它已經封裝了,直接增加自己的命令

exec 須要你自己 fork 進程,然后exec 自己的命令

popen() 也能夠實現運行你的命令,比system 開銷小

方法一、system()的使用。我直接上代碼吧

int system(const char *command);

我在/home/book/shell新建一個test.sh文件例如以下:

span style="font-size:18px;"span style="font-size:18px;"#!bin/bash

echo $HOME

echo "the is test!"/span/span

test.c文件例如以下:

span style="font-size:18px;"span style="font-size:18px;"#includestdlib.h

int main()

{

system("bash /home/book/shell/test.sh"); /* chmod +x test.sh ,路徑前面要加上bash */

return 0;

}/span/span

運行例如以下命令來編譯:

span style="font-size:18px;"gcc test.c -o test

/span

測試命令:

span style="font-size:18px;"./test/span

結果例如以下:

span style="font-size:18px;"/root

the is test!/span

方法二:popen() 會調用fork()產生 子歷程,然后從子歷程中調用/bin/sh -c來履行 參數command的指令。參數type可應用 “r”代表讀取?!皐”代表寫入。遵循此type值。popen()會建立 管道連到子歷程的標準 輸出設備 或標準 輸入設備 ,然后返回一個文件指針。

隨后歷程便可利用 此文件指針來讀取子歷程的輸出設備 或是寫入到子歷程的標準 輸入設備 中。此外,全部應用 文 件指針(FILE*)操作的函數也都能夠應用 ,除了fclose()以外。

返回值:若成功 則返回文件指針,否則返回NULL,差錯 原因存于errno中。注意:在編寫具SUID/SGID權限的程序時請盡量避免應用 popen()。popen()會繼承環境變量。通過環境變量可能會造成系統安全的問題

FILE *popen(const char *command, const char *type);

int pclose(FILE *stream);

其它不用改變我們直接改動test.c文件:

#includestdio.h

int main()

{

char buffer[80];

FILE *fp=popen("bash /home/book/shell/test.sh","r");

fgets(buffer,sizeof(buffer),fp);

printf("%s",buffer);

pclose(fp);

return 0;

}

方法三:exec函數簇 (我不太懂,copy別人的。也沒有驗證。習慣方法一)

須要注意的是exec并非1個函數, 事實上它僅僅是一組函數的統稱, 它包含以下6個函數:

#include unistd.h

int execl(const char *path, const char *arg, ...);

int execlp(const char *file, const char *arg, ...);

int execle(const char *path, const char *arg, ..., char *const envp[]);

int execv(const char *path, char *const argv[]);

int execvp(const char *file, char *const argv[]);

int execve(const char *path, char *const argv[], char *const envp[];

能夠見到這6個函數名字不同, 并且他們用于接受的參數也不同.

實際上他們的功能都是幾乎相同的, 由于要用于接受不同的參數所以要用不同的名字區分它們, 畢竟c語言沒有函數重載的功能嘛..

可是實際上它們的命名是有規律的:

exec[l or v][p][e]

exec函數里的參數能夠分成3個部分, 運行文件部分, 命令參數部分, 環境變量部分.

比如我要運行1個命令 ls -l /home/gateman

運行文件部分就是 "/usr/bin/ls"

命令參賽部分就是 "ls","-l","/home/gateman",NULL 見到是以ls開頭 每1個空格都必須分開成2個部分, 并且以NULL結尾的啊.

環境變量部分, 這是1個數組,最后的元素必須是NULL 比如 char * env[] = {"PATH=/home/gateman", "USER=lei", "STATUS=testing", NULL};

好了說下命名規則:

e興許, 參數必須帶環境變量部分, 環境變零部分參數會成為運行exec函數期間的環境變量, 比較少用

l 興許, 命令參數部分必須以"," 相隔, 最后1個命令參數必須是NULL

v 興許, 命令參數部分必須是1個以NULL結尾的字符串指針數組的頭部指針. 比如char * pstr就是1個字符串的指針, char * pstr[] 就是數組了, 分別指向各個字符串.

關于Linux命令的介紹,看看《linux就該這么學》,具體關于這一章地址3w(dot)linuxprobe/chapter-02(dot)html

p興許, 運行文件部分能夠不帶路徑, exec函數會在$PATH中找

還有1個注意的是, exec函數會代替運行它的進程, 也就是說, 一旦exec函數運行成功, 它就不會返回了, 進程結束. 可是假設exec函數運行失敗, 它會返回失敗的信息, 并且進程繼續運行后面的代碼!

通常exec會放在fork() 函數的子進程部分, 來替代子進程運行啦, 運行成功后子程序就會消失, 可是運行失敗的話, 必須用exit()函數來讓子進程退出!

如何在C語言編程中調用linux系統終端下的命令

system(執行shell 命令)

相關函數 fork,execve,waitpid,popen

表頭文件 #includestdlib.h

定義函數 int system(const char * string);

函數說明 system()會調用fork()產生子進程,由子進程來調用/bin/sh-c string來執行參數string字符串所代表的命令,此命令執行完后隨即返回原調用的進程。在調用system()期間SIGCHLD 信號會被暫時擱置,SIGINT和SIGQUIT 信號則會被忽略。

返回值 如果system()在調用/bin/sh時失敗則返回127,其他失敗原因返回-1。若參數string為空指針(NULL),則返回非零值。如果system()調用成功則最后會返回執行shell命令后的返回值,但是此返回值也有可能為system()調用/bin/sh失敗所返回的127,因此最好能再檢查errno 來確認執行成功。

附加說明 在編寫具有SUID/SGID權限的程序時請勿使用system(),system()會繼承環境變量,通過環境變量可能會造成系統安全的問題。

范例 #includestdlib.h

main()

{

system(“ls -al /etc/passwd /etc/shadow”);

}

執行 -rw-r--r-- 1 root root 705 Sep 3 13 :52 /etc/passwd

-r--------- 1 root root 572 Sep 2 15 :34 /etc/shadow

linux下如何用c語言調用shell命令

在c語言中調用shell命令的方法實現。

c程序調用shell腳本共有兩種方法

:system()、popen(),分別如下:

system()

不用自己去創建進程,系統已經封裝了這一步,直接加入自己的命令即可

popen()

也可以實現執行的命令,比system

開銷小

以下分別說明:

1)system(shell命令或shell腳本路徑);

system()

會調用fork()產生

子歷程,由子歷程來調用/bin/sh-c

string來履行

參數string字符串所代表的命令,此命令履行

完后隨即返回原調用的歷程。在調用system()期間sigchld

信號會被暫時擱置,sigint和sigquit

信號則會被漠視

回值:如果system()在調用/bin/sh時失敗則返回127,其他失敗原因返回-1。若參數string為空指針(null),則返回非零值。

如果

system()調用成功

則最后會返回履行

shell命令后的返回值,但是此返回值也有可能為system()調用/bin/sh失敗所返回的127,因

此最好能再反省

errno

來確認履行

成功

。

system命令以其簡略

高效的作用得到很很廣泛

的利用

,下面是一個例子

例:在/tmp/testdir/目錄下有shell腳本tsh.sh,內容為

#!/bin/sh

wget

$1

echo

"done!"

2)popen(char

*command,char

*type)

popen()

會調用fork()產生

子歷程,然后從子歷程中調用/bin/sh

-c來履行

參數command的指令。參數type可應用

“r”代表讀取,“w”代表寫入。遵循此type值,popen()會建立

管道連到子歷程的標準

輸出設備

或標準

輸入設備

,然后返回一個文件指針。隨后歷程便可利用

此文件指針來讀取子歷程的輸出設備

或是寫入到子歷程的標準

輸入設備

中。此外,所有應用

件指針(file*)操作的函數也都可以應用

,除了fclose()以外。

返回值:若成功

則返回文件指針,否則返回null,差錯

原因存于errno中。注意:在編寫具suid/sgid權限的程序時請盡量避免應用

popen(),popen()會繼承環境變量,通過環境變量可能會造成系統安全的問題。

例:c程序popentest.c內容如下:

#include

main

{

file

*

fp;

charbuffer[80];

fp=popen(“~/myprogram/test.sh”,”r”);

fgets(buffer,sizeof(buffer),fp);

printf(“%s”,buffer);

pclose(fp);

}

我想在linux下寫一個c程序調用linux的可執行文件或者程序,怎么做

Linux C編程中,調用另一個可執行文件或調用命令用system函數最簡單了,這個函數原理是在你編寫的那個程序的內部啟動另一個程序或命令,從而創建一個新進程,并等待這個進程執行完畢退出。如果正常執行,system函數將返回被執行程序或命令的退出碼;如果無法運行這個程序或命令,將返回錯誤代碼127;如果是其他錯誤,返回-1。這個函數的原型是:

#include stdlib.h

int system(const char *string);

參數string是將要執行的程序文件名或路徑,如果是啟動一個命令就是一個命令字符串。

還有一種執行外部程序的方法是exec系列函數,一般是在fork的子進程里面調用exec系列函數,那主進程里直接調用exec系列不行嗎,為什么要fork再在子進程里調用呢?因為exec系列的函數(包括execl函數)是將當前進程替換成新進程,這里的當前進程就是你編寫的程序,也就是說新進程啟動后調用exec函數的進程就不存在了,所以exec系列函數調用之后的代碼就不會再執行了。如果你不放在fork子進程里面,那你編寫的程序的主進程在執行execl函數后就完全不存在了,所以exec系列函數的使用都是先fork然后在子進程里面調用。因為exec系列函數都要使用fork調用,所以我一般是用system函數。


網站欄目:c調用linux命令,c語言實現linux命令
本文來源:http://www.xueling.net.cn/article/dssjodj.html

其他資訊

在線咨詢
服務熱線
服務熱線:028-86922220
TOP
主站蜘蛛池模板: 99热6| 国产艹逼 | 日本性一级 | 国产97免费视频 | 9cao在线播放精品日韩 | 色先锋影音岛国av资源 | 午夜视频在线 | 91精品久久久久久综合乱菊 | 欧美午夜剧场特大黄三级性片片免费 | 中文字幕亚洲无线 | 黄在线观看 | 91五月色国产在线观看 | 亚洲中文字幕无码MV | 欧美国产偷国产精品三区 | 免费观看日本污污ww网站 | 色欲综合五月丁香五月 | 麻豆小视频在线观看 | 四级毛片| 一级片毛片网站 | 久草在线欧美 | 搡女人真爽免费视频大全 | 亚洲成人教育av | 麻豆传谋在线观看免费 | 国产精妇在线观看第一区 | 午夜男女爽爽爽免费播放 | 亚洲欧美一区二区精品中文字幕 | 中文综合在线 | 浮生影院免费观看中文版 | 中文字幕久久波多野结衣AV | 三级毛片儿 | 成人性影院 | 99在线国产视频 | 国产精品美女久久久浪潮软件 | 男操女免费网站 | 三级中文字幕永久在线 | 国产真实乱子伦视频播放 | 91精品国产综合久久久久久久久 | 男女免费在线观看 | 精品韩国三级在线观看视频 | 搞笑一家人韩剧韩语在线看 | 丰满白嫩的大屁股哺乳期偷吃少妇 |