日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
如何獲取Linuxexec命令的返回值(linuxexec返回值)

在Linux系統(tǒng)中,我們通常使用exec命令來執(zhí)行一些程序或腳本。但是,當(dāng)我們執(zhí)行exec命令后,如何獲取它的返回值呢?這是一個(gè)值得我們深入探討的問題。

創(chuàng)新互聯(lián)主營三門網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,app開發(fā)定制,三門h5重慶小程序開發(fā)公司搭建,三門網(wǎng)站營銷推廣歡迎三門等地區(qū)企業(yè)咨詢

在本文中,我們將會(huì)講解如何獲取exec命令的返回值,并介紹一些獲取返回值的方式和技巧。

1. 使用exit命令

我們可以在執(zhí)行完exec命令后,使用exit命令來返回一個(gè)狀態(tài)值。這個(gè)狀態(tài)值可以通過$?來獲取,其值為0表示執(zhí)行成功,其他值則表示執(zhí)行失敗。

這種方法的缺點(diǎn)在于,我們必須要在exec命令執(zhí)行完之后,再使用exit命令返回狀態(tài)值。這樣會(huì)稍微有點(diǎn)麻煩,也不夠優(yōu)雅。

2. 使用pipes

我們還可以利用Linux系統(tǒng)中的pipes來獲取exec命令的返回值。具體做法是,我們可以使用pipe()函數(shù)來創(chuàng)建一對管道,然后使用fork()函數(shù)來創(chuàng)建一個(gè)子進(jìn)程,在子進(jìn)程中執(zhí)行exec命令。

父進(jìn)程可以通過讀取管道來獲取子進(jìn)程執(zhí)行完后的返回值。代碼如下所示:

“`c

#include

#include

#include

int mn() {

int pipefd[2];

pid_t cpid;

char cmd[] = “l(fā)s”;

char *args[] = {“l(fā)s”, NULL};

char buf;

pipe(pipefd);

cpid = fork();

if (cpid == 0) {

/* 子進(jìn)程中執(zhí)行exec命令 */

close(pipefd[0]);

dup2(pipefd[1], STDOUT_FILENO);

dup2(pipefd[1], STDERR_FILENO);

execvp(cmd, args);

perror(“execvp”);

_exit(1);

} else {

/* 父進(jìn)程中讀取管道獲取返回值 */

close(pipefd[1]);

while (read(pipefd[0], &buf, 1) > 0) {

fwrite(&buf, 1, 1, stdout);

}

close(pipefd[0]);

}

return 0;

}

“`

這個(gè)例子中,我們在子進(jìn)程中執(zhí)行了一個(gè)ls命令,并將其輸出到管道中。父進(jìn)程則通過讀取管道來獲取輸出信息,并輸出到終端上。

3. 使用wtpid()函數(shù)

另外一種方法是通過wtpid()函數(shù)來等待子進(jìn)程執(zhí)行完畢,并獲取其返回值。代碼如下所示:

“`c

#include

#include

#include

#include

int mn() {

pid_t cpid, w;

int status;

char cmd[] = “l(fā)s”;

char *args[] = {“l(fā)s”, NULL};

cpid = fork();

if (cpid == 0) {

/* 子進(jìn)程中執(zhí)行exec命令 */

execvp(cmd, args);

perror(“execvp”);

_exit(1);

} else {

/* 父進(jìn)程中使用wtpid()函數(shù)等待子進(jìn)程,獲取返回值 */

w = wtpid(cpid, &status, WUNTRACED | WCONTINUED);

if (w == -1) {

perror(“wtpid”);

_exit(1);

}

if (WIFEXITED(status)) {

printf(“exited, status=%d\n”, WEXITSTATUS(status));

} else if (WIFSIGNALED(status)) {

printf(“killed by signal %d\n”, WTERMSIG(status));

} else if (WIFSTOPPED(status)) {

printf(“stopped by signal %d\n”, WSTOPSIG(status));

} else if (WIFCONTINUED(status)) {

printf(“continued\n”);

}

}

return 0;

}

“`

這個(gè)例子中,我們在父進(jìn)程中使用了wtpid()函數(shù)來等待子進(jìn)程執(zhí)行完畢,并獲取其返回值。我們利用WIFEXITED()函數(shù)來判斷返回值是否為0,如果是,則說明執(zhí)行成功。

相關(guān)問題拓展閱讀:

  • Linux信號(hào)量

Linux信號(hào)量

信號(hào)量是包含一個(gè)非負(fù)整數(shù)型的變量,并且?guī)в袃蓚€(gè)原子操作wait和signal。Wait還可以被稱為down、P或lock,signal還可以被稱為up、V、unlock或post。在UNIX的API中(POSIX標(biāo)準(zhǔn))用的是wait和post。

對于wait操作,如果信號(hào)量的非負(fù)整形變量S大于0,wait就將其減1,如果S等于0,wait就將調(diào)用線程阻塞;對于post操作,如果有線程在信號(hào)量上阻塞(此時(shí)S等于0),post就會(huì)解除對某個(gè)等待線程的阻塞,使其從wait中返回,如果沒有線程阻塞在信號(hào)量上,post就將S加1.

由此可見,S可以被理解為一種資源的數(shù)量,信號(hào)量即是通過控制這種資源的分配來實(shí)現(xiàn)互斥和同步的。如果把S設(shè)為1,那么信號(hào)量即可使多線程并發(fā)運(yùn)行。另外,信號(hào)量不僅允許使用者申請和釋放資源,而且還允許使用者創(chuàng)豎嘩造資源,這就賦予了信號(hào)量實(shí)現(xiàn)同步的功能??梢娦盘?hào)量的功能要比互斥量豐富許多。

POSIX信號(hào)量是一個(gè)sem_t類型的變量,但POSIX有兩種信號(hào)量的實(shí)現(xiàn)機(jī)制:

無名信號(hào)量

命名信號(hào)量

。無名信號(hào)量只可以在共享內(nèi)存的情況下,比如實(shí)現(xiàn)進(jìn)程中各個(gè)線程之間的互斥和同步,因此無名信號(hào)量也被稱作基于內(nèi)存的信號(hào)量;命名信號(hào)量通常用于不共享內(nèi)存的情況下,比如進(jìn)程間通信。

同時(shí),在創(chuàng)建信號(hào)量時(shí),根據(jù)信號(hào)量取值的不同,POSIX信號(hào)量還可以分為:

下面是POSIX信號(hào)量函數(shù)接口:

信號(hào)量的函數(shù)都以sem_開頭,線程中使用的基本信號(hào)函數(shù)有4個(gè),他們都聲明在頭文件semaphore.h中,該頭文件定義了用于信號(hào)量操作的sem_t類型:

【sem_init函數(shù)】:

該函數(shù)用于創(chuàng)猜型建信號(hào)量,原型如下:

該函數(shù)初始化由sem指向的余兆行信號(hào)對象,設(shè)置它的共享選項(xiàng),并給它一個(gè)初始的整數(shù)值。pshared控制信號(hào)量的類型,如果其值為0,就表示信號(hào)量是當(dāng)前進(jìn)程的局部信號(hào)量,否則信號(hào)量就可以在多個(gè)進(jìn)程間共享,value為sem的初始值。

該函數(shù)調(diào)用成功返回0,失敗返回-1。

【sem_destroy函數(shù)】:

該函數(shù)用于對用完的信號(hào)量進(jìn)行清理,其原型如下:

成功返回0,失敗返回-1。

【sem_wait函數(shù)】:

該函數(shù)用于以原子操作的方式將信號(hào)量的值減1。原子操作就是,如果兩個(gè)線程企圖同時(shí)給一個(gè)信號(hào)量加1或減1,它們之間不會(huì)互相干擾。其原型如下:

sem指向的對象是sem_init調(diào)用初始化的信號(hào)量。調(diào)用成功返回0,失敗返回-1。

sem_trywait()則是sem_wait()的非阻塞版本,當(dāng)條件不滿足時(shí)(信號(hào)量為0時(shí)),該函數(shù)直接返回EAGAIN錯(cuò)誤而不會(huì)阻塞等待。

sem_timedwait()功能與sem_wait()類似,只是在指定的abs_timeout時(shí)間內(nèi)等待,超過時(shí)間則直接返回ETIMEDOUT錯(cuò)誤。

【sem_post函數(shù)】:

該函數(shù)用于以原子操作的方式將信號(hào)量的值加1,其原型如下:

與sem_wait一樣,sem指向的對象是由sem_init調(diào)用初始化的信號(hào)量。調(diào)用成功時(shí)返回0,失敗返回-1。

【sem_getvalue函數(shù)】:

該函數(shù)返回當(dāng)前信號(hào)量的值,通過restrict輸出參數(shù)返回。如果當(dāng)前信號(hào)量已經(jīng)上鎖(即同步對象不可用),那么返回值為0,或?yàn)樨?fù)數(shù),其絕對值就是等待該信號(hào)量解鎖的線程數(shù)。

【實(shí)例1】:

【實(shí)例2】:

之所以稱為命名信號(hào)量,是因?yàn)樗幸粋€(gè)名字、一個(gè)用戶ID、一個(gè)組ID和權(quán)限。這些是提供給不共享內(nèi)存的那些進(jìn)程使用命名信號(hào)量的接口。命名信號(hào)量的名字是一個(gè)遵守路徑名構(gòu)造規(guī)則的字符串。

【sem_open函數(shù)】:

該函數(shù)用于創(chuàng)建或打開一個(gè)命名信號(hào)量,其原型如下:

參數(shù)name是一個(gè)標(biāo)識(shí)信號(hào)量的字符串。參數(shù)oflag用來確定是創(chuàng)建信號(hào)量還是連接已有的信號(hào)量。

oflag的參數(shù)可以為0,O_CREAT或O_EXCL:如果為0,表示打開一個(gè)已存在的信號(hào)量;如果為O_CREAT,表示如果信號(hào)量不存在就創(chuàng)建一個(gè)信號(hào)量,如果存在則打開被返回,此時(shí)mode和value都需要指定;如果為O_CREAT|O_EXCL,表示如果信號(hào)量存在則返回錯(cuò)誤。

mode參數(shù)用于創(chuàng)建信號(hào)量時(shí)指定信號(hào)量的權(quán)限位,和open函數(shù)一樣,包括:S_IRUSR、S_IWUSR、S_IRGRP、S_IWGRP、S_IROTH、S_IWOTH。

value表示創(chuàng)建信號(hào)量時(shí),信號(hào)量的初始值。

【sem_close函數(shù)】:

該函數(shù)用于關(guān)閉命名信號(hào)量:

單個(gè)程序可以用sem_close函數(shù)關(guān)閉命名信號(hào)量,但是這樣做并不能將信號(hào)量從系統(tǒng)中刪除,因?yàn)槊盘?hào)量在單個(gè)程序執(zhí)行之外是具有持久性的。當(dāng)進(jìn)程調(diào)用_exit、exit、exec或從main返回時(shí),進(jìn)程打開的命名信號(hào)量同樣會(huì)被關(guān)閉。

【sem_unlink函數(shù)】:

sem_unlink函數(shù)用于在所有進(jìn)程關(guān)閉了命名信號(hào)量之后,將信號(hào)量從系統(tǒng)中刪除:

【信號(hào)量操作函數(shù)】:

與無名信號(hào)量一樣,操作信號(hào)量的函數(shù)如下:

命名信號(hào)量是隨內(nèi)核持續(xù)的。當(dāng)命名信號(hào)量創(chuàng)建后,即使當(dāng)前沒有進(jìn)程打開某個(gè)信號(hào)量,它的值依然保持,直到內(nèi)核重新自舉或調(diào)用sem_unlink()刪除該信號(hào)量。

無名信號(hào)量的持續(xù)性要根據(jù)信號(hào)量在內(nèi)存中的位置確定:

很多時(shí)候信號(hào)量、互斥量和條件變量都可以在某種應(yīng)用中使用,那這三者的差異有哪些呢?下面列出了這三者之間的差異:

linux exec返回值的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于linux exec返回值,如何獲取Linux exec命令的返回值,Linux信號(hào)量的信息別忘了在本站進(jìn)行查找喔。

創(chuàng)新互聯(lián)成都網(wǎng)站建設(shè)公司提供專業(yè)的建站服務(wù),為您量身定制,歡迎來電(028-86922220)為您打造專屬于企業(yè)本身的網(wǎng)絡(luò)品牌形象。
成都創(chuàng)新互聯(lián)品牌官網(wǎng)提供專業(yè)的網(wǎng)站建設(shè)、設(shè)計(jì)、制作等服務(wù),是一家以網(wǎng)站建設(shè)為主要業(yè)務(wù)的公司,在網(wǎng)站建設(shè)、設(shè)計(jì)和制作領(lǐng)域具有豐富的經(jīng)驗(yàn)。


新聞標(biāo)題:如何獲取Linuxexec命令的返回值(linuxexec返回值)
網(wǎng)頁URL:http://www.5511xx.com/article/dpeipee.html