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

  免費注冊 查看新帖 |

Chinaunix

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

求助:APUE 程序清單1-5 沒有按照預(yù)期的執(zhí)行,只能執(zhí)行一個命令就退出? [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2012-06-29 16:10 |只看該作者 |倒序瀏覽
問題如標題。
程序如下:
#include <sys/wait.h>
#include <stdio.h>
#include <sys/types.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>

#define MAXLINE 80
int main(void)
{
        char buf[MAXLINE];
        pid_t pid;
        int status;

        printf(" %%");
        while(fgets(buf, MAXLINE, stdin) != NULL) {
                if (buf[strlen(buf) - 1] == '\n') {
                        buf[strlen(buf) - 1] = 0;
                }

                if ((pid = fork()) < 0) {
                        printf("fork error!");
                } else {
                        execlp(buf, buf, (char*) (0));
                        printf("could not exec!", buf);
                        exit(127);
                }

                if ((pid = waitpid(pid, &status, 0)) < 0) {
                        printf("waitpid error!");
                }
                printf(" %%");
        }
        exit(0);
}


本來程序應(yīng)該是能夠逐條讀取命令,并執(zhí)行。
直到輸入ctrl+D 才推出的,可是執(zhí)行時,讀取一條命令就退出了。
不知什么原因。
求指點。

論壇徽章:
0
2 [報告]
發(fā)表于 2012-06-29 17:20 |只看該作者
#include <sys/wait.h>
#include <stdio.h>
#include <sys/types.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>

#define MAXLINE 80
int main(void)
{
        char buf[MAXLINE];
        pid_t pid;
        int status;

        printf(" %%");
        while(fgets(buf, MAXLINE, stdin) != NULL) {
                if (buf[strlen(buf) - 1] == '\n') {
                        buf[strlen(buf) - 1] = 0;
                }

                if ((pid = fork()) < 0) {
                        printf("fork error!");
                } else if(pid == 0){   /*程序愿意應(yīng)該是在子進程執(zhí)行該命令吧*/
                        execlp(buf, buf, (char*) (0));
                        printf("%s could not exec! ", buf);  /*加個%s*/
//                      exit(127); /*這條命令讓程序退出*/
                }

                if ((pid = waitpid(pid, &status, 0)) < 0) {
                        printf("waitpid error!");
                }
                printf(" %%");
        }
        exit(0);
}

論壇徽章:
5
獅子座
日期:2013-08-20 10:12:24午馬
日期:2013-11-23 18:04:102015年辭舊歲徽章
日期:2015-03-03 16:54:152015亞冠之德黑蘭石油
日期:2015-06-29 18:11:1115-16賽季CBA聯(lián)賽之新疆
日期:2024-02-21 10:00:53
3 [報告]
發(fā)表于 2012-06-29 18:01 |只看該作者
                if ((pid = fork()) < 0) {
                        printf("fork error!");
                } else {
                        execlp(buf, buf, (char*) (0));
                        printf("could not exec!", buf);
                        exit(127);
                }

你只判斷失敗,殊不知fork會返回兩個值的……

論壇徽章:
0
4 [報告]
發(fā)表于 2012-07-02 18:00 |只看該作者
回復(fù) 2# add358

對對 謝謝。
應(yīng)該在子進程中執(zhí)行exec命令,我沒有判斷是否在子進程了。謝謝

   

論壇徽章:
0
5 [報告]
發(fā)表于 2012-07-02 18:02 |只看該作者
回復(fù) 3# starwing83

提醒的是!

謝謝哈~~~
您需要登錄后才可以回帖 登錄 | 注冊

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

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP