亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 1687 | 回復(fù): 3
打印 上一主題 下一主題

[C] 請(qǐng)大家看個(gè)Unix /linux 編程實(shí)踐上的例子 [復(fù)制鏈接]

論壇徽章:
13
CU大;照
日期:2013-03-14 14:14:082016科比退役紀(jì)念章
日期:2016-07-22 11:15:35數(shù)據(jù)庫技術(shù)版塊每日發(fā)帖之星
日期:2016-05-27 06:20:002015亞冠之吉達(dá)阿赫利
日期:2015-08-05 10:06:542015年亞洲杯之韓國
日期:2015-04-01 16:05:42雙魚座
日期:2014-11-13 11:04:24丑牛
日期:2014-07-25 17:29:54子鼠
日期:2014-04-25 12:25:45丑牛
日期:2014-04-17 08:35:48巨蟹座
日期:2014-04-16 16:50:05CU大牛徽章
日期:2013-03-14 14:14:29CU大;照
日期:2013-03-14 14:14:26
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2016-01-18 15:12 |只看該作者 |倒序?yàn)g覽
代碼如下:
  1. #include <apue.h>

  2. #define MAXARGS 20
  3. #define ARGLEN 100

  4. int main()
  5. {
  6.     char *arglist[MAXARGS+1];  //an array of ptrs*
  7.     int numargs;                //index into arrays
  8.     char argbuf[ARGLEN];        //read stuff here
  9.     char *makestring();         //malloc etc
  10.     numargs = 0;
  11.     while (numargs < MAXARGS)
  12.     {
  13.         printf("Arg[%d]?",numargs);
  14.         if(fgets(argbuf,ARGLEN,stdin) && *argbuf!='\n')
  15.             arglist[numargs++]=makestring(argbuf);
  16.         else
  17.         {
  18.             if(numargs > 0){
  19.                 arglist[numargs]=NULL;
  20.                 execute(arglist);
  21.                 numargs=0;
  22.                 }
  23.             }
  24.         }
  25.     return 0;
  26.     }


  27. int execute(char *arglist[])
  28. {
  29.     execvp(arglist[0],arglist);
  30.     perror("execvp failed");
  31.     exit(1);
  32.     }

  33. char *makestring(char *buf)
  34. {
  35.     char *cp;

  36.     buf[strlen(buf)-1]='\0';
  37.     cp=malloc(strlen(buf)+1);
  38.     if(cp==NULL){
  39.         fprintf(stderr,"no memory\n");
  40.         exit(1);
  41.         }
  42.     strcpy(cp,buf);
  43.     return cp;
  44.     }
復(fù)制代碼
說白了就是用exec* 在當(dāng)前bash 下覆蓋,exit退出,應(yīng)該退出當(dāng)前bash進(jìn)程。
但是實(shí)際執(zhí)行的時(shí)候不是如此:
  1. [root@ system_program]# ./psh1
  2. Arg[0]?pwd
  3. Arg[1]?
  4. /usr/local/src/c/system_program
  5. [root@ system_program]#
復(fù)制代碼
這是為什么?
是bash 現(xiàn)在的運(yùn)行機(jī)制嗎?

論壇徽章:
1
射手座
日期:2014-08-04 16:49:43
2 [報(bào)告]
發(fā)表于 2016-01-18 15:18 |只看該作者
沒看出有什么結(jié)果不對(duì)....

論壇徽章:
84
每日論壇發(fā)貼之星
日期:2015-12-29 06:20:00每日論壇發(fā)貼之星
日期:2016-01-16 06:20:00每周論壇發(fā)貼之星
日期:2016-01-17 22:22:00程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-01-20 06:20:00每日論壇發(fā)貼之星
日期:2016-01-20 06:20:00程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-01-21 06:20:00每日論壇發(fā)貼之星
日期:2016-01-21 06:20:00程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-01-23 06:20:00程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-01-31 06:20:00數(shù)據(jù)庫技術(shù)版塊每日發(fā)帖之星
日期:2016-01-16 06:20:00程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-01-16 06:20:00程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-01-14 06:20:00
3 [報(bào)告]
發(fā)表于 2016-01-18 15:31 |只看該作者
exec 覆蓋的是調(diào)用它的進(jìn)程 ./psh1 , 不是什么當(dāng)前 bash;

bash 內(nèi)建命令 exec 才能覆蓋自己。你直接 ./psh1 是先 fork() 一個(gè)child process,child process 里面再 exec

論壇徽章:
13
CU大;照
日期:2013-03-14 14:14:082016科比退役紀(jì)念章
日期:2016-07-22 11:15:35數(shù)據(jù)庫技術(shù)版塊每日發(fā)帖之星
日期:2016-05-27 06:20:002015亞冠之吉達(dá)阿赫利
日期:2015-08-05 10:06:542015年亞洲杯之韓國
日期:2015-04-01 16:05:42雙魚座
日期:2014-11-13 11:04:24丑牛
日期:2014-07-25 17:29:54子鼠
日期:2014-04-25 12:25:45丑牛
日期:2014-04-17 08:35:48巨蟹座
日期:2014-04-16 16:50:05CU大;照
日期:2013-03-14 14:14:29CU大牛徽章
日期:2013-03-14 14:14:26
4 [報(bào)告]
發(fā)表于 2016-01-18 15:43 |只看該作者
LS 說的是啊,我后來才想到 bash 是先fork出psh1 ,然后exec 的。
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP