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

Chinaunix

標(biāo)題: 詭異, execlp 出錯(cuò)返回執(zhí)行perror 的疑問! [打印本頁]

作者: voidroc    時(shí)間: 2009-04-30 12:08
標(biāo)題: 詭異, execlp 出錯(cuò)返回執(zhí)行perror 的疑問!
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <string.h>
#include <error.h>
const char MAXLINE = 80;
//extern char ** environ;

char * environ[] = {"PATH=/usr/bin",(char * )0};
int main(int argc , char * argv[])
{
    int status;
    char buf[MAXLINE];
    pid_t pid;
   
    printf("myshell%%");

    while (fgets(buf,MAXLINE,stdin)!=NULL)
    {
        if (strlen(buf)==1)
            continue;
        if ( (pid = fork()) < 0 )
        {
            printf("%s",argv[0]);// 注意這一行,沒有\(zhòng)n
            perror(":fork error! ");   
            exit(1) ;
        }
        else if (pid == 0)
        {
            printf("to exec %s\n",buf);
            execlp(buf,buf,(char *)0);
            printf("%s",argv[0]);
            perror(":execlp error1! ");   
            printf("%s\n",argv[0]);
            perror(":execlp error2! ");   
            printf("%s\n",argv[0]);
            perror(":execlp error3! ");   
            exit(1) ;
        }
        if ( (waitpid(pid,&status,0)) < 0 )
        {
            printf("%s",argv[0]);
            perror(":waitpid error! ");   
            exit(1) ;
        }
        printf("myshell%%");

    }

    return 0;
}



執(zhí)行結(jié)果如下:

myshell% ls
to exec ls

:execlp error1! : No such file or directory
./a.out./a.out
:execlp error2! : Illegal seek
./a.out
:execlp error3! : Illegal seek

兩個(gè)./a.out打印到了一起,而且第一個(gè)a.out在perror之后

這是為什么呢?
作者: voidroc    時(shí)間: 2009-04-30 12:09
標(biāo)題: 回復(fù) #1 voidroc 的帖子
還有 怎么為execlp設(shè)置PATH環(huán)境變量呢?
作者: 皇家救星    時(shí)間: 2009-04-30 12:33
一個(gè)是標(biāo)準(zhǔn)輸出,一個(gè)是標(biāo)準(zhǔn)錯(cuò)誤輸出

標(biāo)準(zhǔn)輸出一般有緩沖,標(biāo)準(zhǔn)錯(cuò)誤輸出一般沒有


printf碰上\n后會刷新緩沖

以上均是經(jīng)驗(yàn),沒找到標(biāo)準(zhǔn)支持
作者: voidroc    時(shí)間: 2009-05-01 16:01
標(biāo)題: 回復(fù) #3 皇家救星 的帖子
有道理!
沒注意是標(biāo)準(zhǔn)錯(cuò)誤輸出 呵呵
作者: alphayeah    時(shí)間: 2009-05-01 18:08
原帖由 皇家救星 于 2009-4-30 12:33 發(fā)表
一個(gè)是標(biāo)準(zhǔn)輸出,一個(gè)是標(biāo)準(zhǔn)錯(cuò)誤輸出

標(biāo)準(zhǔn)輸出一般有緩沖,標(biāo)準(zhǔn)錯(cuò)誤輸出一般沒有


printf碰上\n后會刷新緩沖

以上均是經(jīng)驗(yàn),沒找到標(biāo)準(zhǔn)支持


printf碰上\n后會刷新緩沖,感覺不應(yīng)該是這樣呀:wink:
我也沒看資料,但是最近我做的一項(xiàng)目是重定向到socket,很明顯就不是根據(jù)這個(gè)規(guī)則來強(qiáng)制寫緩沖。
作者: ttplay    時(shí)間: 2009-05-01 18:21
這個(gè)不就是APUE第9頁里的一個(gè)例子嗎?
作者: voidroc    時(shí)間: 2009-05-01 20:32
標(biāo)題: 回復(fù) #5 alphayeah 的帖子
應(yīng)該是這個(gè)原因, stdout 與stderr 不是用的一塊緩沖區(qū)




歡迎光臨 Chinaunix (http://72891.cn/) Powered by Discuz! X3.2