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

  免費注冊 查看新帖 |

Chinaunix

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

[函數(shù)] 詭異, execlp 出錯返回執(zhí)行perror 的疑問! [復制鏈接]

論壇徽章:
0
跳轉到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2009-04-30 12:08 |只看該作者 |倒序瀏覽
#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í)行結果如下:

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

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

這是為什么呢?

論壇徽章:
0
2 [報告]
發(fā)表于 2009-04-30 12:09 |只看該作者

回復 #1 voidroc 的帖子

還有 怎么為execlp設置PATH環(huán)境變量呢?

論壇徽章:
0
3 [報告]
發(fā)表于 2009-04-30 12:33 |只看該作者
一個是標準輸出,一個是標準錯誤輸出

標準輸出一般有緩沖,標準錯誤輸出一般沒有


printf碰上\n后會刷新緩沖

以上均是經(jīng)驗,沒找到標準支持

論壇徽章:
0
4 [報告]
發(fā)表于 2009-05-01 16:01 |只看該作者

回復 #3 皇家救星 的帖子

有道理!
沒注意是標準錯誤輸出 呵呵

論壇徽章:
0
5 [報告]
發(fā)表于 2009-05-01 18:08 |只看該作者
原帖由 皇家救星 于 2009-4-30 12:33 發(fā)表
一個是標準輸出,一個是標準錯誤輸出

標準輸出一般有緩沖,標準錯誤輸出一般沒有


printf碰上\n后會刷新緩沖

以上均是經(jīng)驗,沒找到標準支持


printf碰上\n后會刷新緩沖,感覺不應該是這樣呀:wink:
我也沒看資料,但是最近我做的一項目是重定向到socket,很明顯就不是根據(jù)這個規(guī)則來強制寫緩沖。

論壇徽章:
0
6 [報告]
發(fā)表于 2009-05-01 18:21 |只看該作者
這個不就是APUE第9頁里的一個例子嗎?

論壇徽章:
0
7 [報告]
發(fā)表于 2009-05-01 20:32 |只看該作者

回復 #5 alphayeah 的帖子

應該是這個原因, stdout 與stderr 不是用的一塊緩沖區(qū)
您需要登錄后才可以回帖 登錄 | 注冊

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

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP