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

Chinaunix

標(biāo)題: 各位,有了新的問題,再次麻煩大家give me a hand [打印本頁]

作者: NewCore    時間: 2007-06-04 17:42
標(biāo)題: 各位,有了新的問題,再次麻煩大家give me a hand
這里是http://linux.chinaunix.net/bbs/thread-899878-1-1.html的續(xù)貼,現(xiàn)在遇到了新的問題

問題如下: 我首先把stdout重定向到了一個文件a.out, 然后一個子進(jìn)程執(zhí)行system("tar > stdout"),把數(shù)據(jù)寫到文件a.out中,同時,主進(jìn)程read文件a.out,把命令執(zhí)行結(jié)果讀出來,現(xiàn)在我發(fā)現(xiàn)system命令執(zhí)行時把輸出先緩存起來了,所以導(dǎo)致我在主進(jìn)程中不能及時讀到數(shù)據(jù),而只有等到system命令執(zhí)行完了,系統(tǒng)才把數(shù)據(jù)從緩存中寫到文件a.out.

請問用什么辦法,使system即使把輸出寫到文件a.out,而不是得等到它執(zhí)行完|???

如果有人說為什么用這個辦法,而不用...,請參考帖子http://linux.chinaunix.net/bbs/thread-899878-1-1.html,

我也是沒有辦法之舉!!!現(xiàn)在只求解決問題.
作者: MMMIX    時間: 2007-06-04 18:14
原帖由 NewCore 于 2007-6-4 17:42 發(fā)表于 1樓  
這里是http://linux.chinaunix.net/bbs/thread-899878-1-1.html的續(xù)貼,現(xiàn)在遇到了新的問題

問題如下: 我首先把stdout重定向到了一個文件a.out, 然后一個子進(jìn)程執(zhí)行system("tar > stdout"),把數(shù) ...

我一直很好奇你為什么不用 fork+exec 而堅(jiān)持要用 system ?用 fork+exec 的話許多東西都是你可以控制的,但用 system 則否。
作者: NewCore    時間: 2007-06-04 18:24
to MMMIX

謝謝回復(fù)!

嗯,我記得在第一個帖子里,你就讓我用exec代替system,我也是這樣嘗試了,但是沒有解決問題啊!

我現(xiàn)在也可以用exec代替system,只是我想請問一下,是否用exec就可以把輸出重定向到文件,且是及時把結(jié)果寫到文件,而不是等到命令結(jié)束返回?

其實(shí),我還用pthread + system的方式嘗試過,主線程create子線程而不是子進(jìn)程(我懷疑過是fork + system的問題),但是問題還是一樣,system就是不及時寫文件,而是等到命令返回才寫文件。

我已經(jīng)快黔驢技窮了,找到了問題所在,卻不知道該如何解決。。。希望能給我一些好辦法和思路。
作者: NewCore    時間: 2007-06-04 18:27
我先回家了,我會及時關(guān)注各位的回復(fù),謝謝!
作者: MMMIX    時間: 2007-06-04 19:03
原帖由 NewCore 于 2007-6-4 18:24 發(fā)表于 3樓  
to MMMIX

謝謝回復(fù)!

嗯,我記得在第一個帖子里,你就讓我用exec代替system,我也是這樣嘗試了,但是沒有解決問題啊!

我現(xiàn)在也可以用exec代替system,只是我想請問一下,是否用exec就可以把輸出重定向到文件,且是及時把結(jié)果寫到文件,而不是等到命令結(jié)束返回?

當(dāng)然可以,適當(dāng)?shù)脑O(shè)置緩沖模式就行了。甚至你還可以在打開文件的時候指定同步標(biāo)志,或者在寫完文件的時候手工刷新。
作者: anhongkui    時間: 2007-06-04 19:34
設(shè)置緩沖模式
行緩沖或者無緩沖
作者: NewCore    時間: 2007-06-04 21:48
原帖由 MMMIX 于 2007-6-4 19:03 發(fā)表于 5樓  

當(dāng)然可以,適當(dāng)?shù)脑O(shè)置緩沖模式就行了。甚至你還可以在打開文件的時候指定同步標(biāo)志,或者在寫完文件的時候手工刷新。



大哥,你又給了我一線希望,請問你說得“適當(dāng)設(shè)置緩沖模式”能不能具體點(diǎn)?

“甚至你還可以在打開文件的時候指定同步標(biāo)志,或者在寫完文件的時候手工刷新!蹦懿荒芫唧w點(diǎn),同時我也在網(wǎng)上查一下。

現(xiàn)在在家了,沒環(huán)境,明天到公司我再試看,請繼續(xù)跟蹤,謝謝!
作者: NewCore    時間: 2007-06-04 21:49
原帖由 anhongkui 于 2007-6-4 19:34 發(fā)表于 6樓  
設(shè)置緩沖模式
行緩沖或者無緩沖


謝謝,我查下資料,如果不麻煩的話,能不能再詳細(xì)點(diǎn)?
作者: MMMIX    時間: 2007-06-04 22:03
原帖由 NewCore 于 2007-6-4 21:48 發(fā)表于 7樓  



大哥,你又給了我一線希望,請問你說得“適當(dāng)設(shè)置緩沖模式”能不能具體點(diǎn)?

“甚至你還可以在打開文件的時候指定同步標(biāo)志,或者在寫完文件的時候手工刷新。”能不能具體點(diǎn),同時我也在網(wǎng)上查一下。

...

強(qiáng)烈建議 APUE2。
作者: NewCore    時間: 2007-06-04 22:51
為了便于解決問題,我在這里還是把關(guān)鍵代碼列一下,代碼在公司,我只能大概給出個思路了:

void * bk_thread(void *)
{
    int fd;
   
    fd = open("a.out", O_CREAT | O_RDWR);   /* a.out 作為保存輸出信息的文件 */
   
    dup2(fd, 1)

    if(0 == fork())
    {
        system("tar ... >&1");        /* 故意加 >&1 到輸出,實(shí)際上到a.out文件 */
        exit(1);
    }
   
    int fd_dup;
    int count;

    fd_dup = dup(fd);    /* 后面用fd_dup來操作 */

    while((count = read()) >= 0)         /* 這里count一直=0,除非system()返回,那個時候數(shù)據(jù)才被寫道文件a.out中 */
    {
        if(count == 0)                /* 數(shù)據(jù)為0,判斷子進(jìn)城是否結(jié)束,結(jié)束就退出,沒結(jié)束sleep一下后繼續(xù)去讀 */
        {
            
        }
        else                        /* 處理讀出來的數(shù)據(jù) */
        {
        }      
    }   
}

int main()
{

    pthread_t tid;

    /* do something */

    pthread_create(bk_thread);
    pthread_join(&tid, NULL);
}

我大概思路就是這樣了,我初步定為應(yīng)該是緩沖的問題,請看看是嗎?

to MMMIX, 我查下有問題在問吧。上面應(yīng)該是這個問題導(dǎo)致的嗎?
作者: NewCore    時間: 2007-06-05 09:34
各位,我按照昨天的提示,打開文件時設(shè)置同步標(biāo)志,然后加上了緩沖設(shè)置,如下:

void * bk_thread(void *)
{
    int fd;
    FILE * fp;
    char linebuf[BUFLEN + 1];

    fd = open("a.out", O_CREAT | O_RDWR | O_SYNC);   /* a.out 作為保存輸出信息的文件, */

/*************設(shè)置為行緩沖*******************/   
    fp = fdopen(fd, "w+");
    setvbuf(fp, linebuf, _IOLBF, BUFLEN);
/*****************************************/   
    dup2(fd, 1)

    if(0 == fork())
    {
        system("tar ... >&1");        /* 故意加 >&1 到輸出,實(shí)際上到a.out文件 */
        exit(1);
    }
   
    int fd_dup;
    int count;

    fd_dup = dup(fd);    /* 后面用fd_dup來操作 */

    while((count = read()) >= 0)         /* 這里count一直=0,除非system()返回,那個時候數(shù)據(jù)才被寫道文件a.out中 */
    {
        if(count == 0)                /* 數(shù)據(jù)為0,判斷子進(jìn)城是否結(jié)束,結(jié)束就退出,沒結(jié)束sleep一下后繼續(xù)去讀 */
        {
            
        }
        else                        /* 處理讀出來的數(shù)據(jù) */
        {
        }      
    }   
}

現(xiàn)在還是讀不出來數(shù)據(jù)?
作者: flw2    時間: 2007-06-05 12:41
實(shí)在是敘述的糟糕,能否再清楚的描述一下你

想要怎么樣
作者: flw2    時間: 2007-06-05 12:42
所有的緩沖如果不起作用,那么肯定是因?yàn)槟悴]有改變tar,也許tar是有緩沖的。
不知道為什么要這么干。
作者: flw2    時間: 2007-06-05 12:44
摟住,我沒有別的意思,我只是希望你能描述的清楚一點(diǎn)。
作者: flw2    時間: 2007-06-05 12:46
我首先把stdout重定向到了一個文件a.out, 然后一個子進(jìn)程執(zhí)行system("tar > stdout"),把數(shù)據(jù)寫到文件a.out中,同時,主進(jìn)程read文件a.out,把命令執(zhí)行結(jié)果讀出來

fp = popen("tar ..","r");
tar應(yīng)該也不至于讓你等太久呀。
作者: NewCore    時間: 2007-06-05 13:14
原帖由 flw2 于 2007-6-5 12:44 發(fā)表于 14樓  
摟住,我沒有別的意思,我只是希望你能描述的清楚一點(diǎn)。


好,我再詳細(xì)說說。我要解開一個tar包,同時把tar命令執(zhí)行的輸出(即知道解包后的文件名列表)截取下來,現(xiàn)在我用的辦法是首先把標(biāo)準(zhǔn)輸出重定向到文件a.out,然后一個子進(jìn)程system("tar")到標(biāo)準(zhǔn)輸出,實(shí)際上是到了a.out,然后主進(jìn)程在從文件a.out中讀出文件列表,即tar命令的輸出。

本來應(yīng)該是很簡單的一個事情,但是現(xiàn)在問題在于:子進(jìn)程在執(zhí)行system的時候,不時如同我們平時在shell下執(zhí)行tar時那樣,一邊解包,一邊把輸出到文件,而是把書出緩存起來(我估計(jì)是這樣) ,直到tar執(zhí)行完了,才把輸出一起寫到文件a.out中,但是,這是不滿足我的需求的.我需要及時知道當(dāng)前解包到那個文件了,說白了,我需要對當(dāng)前正在解包的文件的名字作其他處理.

上面就是這個的代碼實(shí)現(xiàn),而我現(xiàn)在就是不知道如何解決我上面說的問題,我嘗試了很多辦法,都沒有效果,希望你能給我點(diǎn)提示?謝謝!
作者: NewCore    時間: 2007-06-05 13:16
原帖由 flw2 于 2007-6-5 12:46 發(fā)表于 15樓  
我首先把stdout重定向到了一個文件a.out, 然后一個子進(jìn)程執(zhí)行system("tar > stdout"),把數(shù)據(jù)寫到文件a.out中,同時,主進(jìn)程read文件a.out,把命令執(zhí)行結(jié)果讀出來

fp = popen("tar ..",& ...


我們的系統(tǒng)是經(jīng)過裁減的嵌入式系統(tǒng),popen已經(jīng)被裁掉了,我有苦難言!
作者: NewCore    時間: 2007-06-05 13:37
原帖由 flw2 于 2007-6-5 12:42 發(fā)表于 13樓  
所有的緩沖如果不起作用,那么肯定是因?yàn)槟悴]有改變tar,也許tar是有緩沖的。
不知道為什么要這么干。


奇怪的是,如果tar命令自己有緩沖,在shell里直接執(zhí)行tar命令的時候,也不是說解包完了,才在屏幕上顯示出來,而是一邊解包,一邊執(zhí)行的.
作者: NewCore    時間: 2007-06-06 00:37
沒人了嗎?其實(shí),我也覺得這個問題確實(shí)是相當(dāng)?shù)脑幃悾?br />
我已作了最壞打算,下了tar的源碼,準(zhǔn)備把它編到自己的代碼里面...鐵了心要把它搞定。
作者: langue    時間: 2007-06-06 08:07
這個任務(wù)用 shell 寫不好嗎?
作者: mirnshi    時間: 2007-06-06 09:53
最簡單的就是popen,如果有可能,可以自己摘抄一個popen。如果只能選擇system,而且>轉(zhuǎn)向不靈的,是不是可以采用|管道,經(jīng)由另一個你自己編寫的程序讀取stdin,然后通過unix-socket之類的傳給主控程序。文件操作應(yīng)該是有緩沖的。管道沒有。
作者: NewCore    時間: 2007-06-06 10:58
原帖由 langue 于 2007-6-6 08:07 發(fā)表于 20樓  
這個任務(wù)用 shell 寫不好嗎?



我不會用shell做UI...
作者: NewCore    時間: 2007-06-06 11:06
原帖由 mirnshi 于 2007-6-6 09:53 發(fā)表于 21樓  
最簡單的就是popen,如果有可能,可以自己摘抄一個popen。如果只能選擇system,而且>轉(zhuǎn)向不靈的,是不是可以采用|管道,經(jīng)由另一個你自己編寫的程序讀取stdin,然后通過unix-socket之類的傳給主控程序。文件 ...



研究tar代碼中,支持自己裁減

我準(zhǔn)備把gzip解壓裁掉,然后在代碼里面自己用gzip解壓,保留tar的解包功能,得到解包后的文件名就OK了,還在實(shí)驗(yàn)中.

現(xiàn)在比較郁悶的是,這段代碼有些extern的函數(shù),先嘗試一下再看吧...
作者: MMMIX    時間: 2007-06-06 11:58
原帖由 NewCore 于 2007-6-6 11:06 發(fā)表于 23樓  



研究tar代碼中,支持自己裁減

我準(zhǔn)備把gzip解壓裁掉,然后在代碼里面自己用gzip解壓,保留tar的解包功能,得到解包后的文件名就OK了,還在實(shí)驗(yàn)中.

現(xiàn)在比較郁悶的是,這段代碼有些extern的函數(shù),先嘗試一下 ...

現(xiàn)在是越繞越遠(yuǎn)了
作者: flw2    時間: 2007-06-06 13:21
tar的輸出是什么?我覺得tar就是輸出一個目錄樹。

所以你要什么呢?目錄樹的結(jié)構(gòu)(名字而不是內(nèi)容)?
作者: NewCore    時間: 2007-06-06 13:33
原帖由 flw2 于 2007-6-6 13:21 發(fā)表于 25樓  
tar的輸出是什么?我覺得tar就是輸出一個目錄樹。

所以你要什么呢?目錄樹的結(jié)構(gòu)(名字而不是內(nèi)容)?


我要內(nèi)容. 現(xiàn)在的問題是,我得不到.
作者: NewCore    時間: 2007-06-06 13:39
原帖由 flw2 于 2007-6-6 13:21 發(fā)表于 25樓  
tar的輸出是什么?我覺得tar就是輸出一個目錄樹。

所以你要什么呢?目錄樹的結(jié)構(gòu)(名字而不是內(nèi)容)?


現(xiàn)在以下幾種方法,已測試不可行:

1. popen -------------- popen被裁減,運(yùn)行popen時系統(tǒng)直接報(bào)segment fault
2. fork + system(exec) + pipe ------------- 重定向到管道,從管道中讀
3. fork + system(exec) + file---------------- 重定向到文件,在從文件中讀

現(xiàn)在
4. 把tar源碼編進(jìn)來, 得到tar包中文件------------嘗試中
5. ???
作者: flw2    時間: 2007-06-06 14:29
原帖由 NewCore 于 2007-6-6 13:33 發(fā)表于 26樓  


我要內(nèi)容. 現(xiàn)在的問題是,我得不到.


你要什么內(nèi)容,我怎么給你?
假設(shè)tar已經(jīng)完成了,你會取嗎?tar又不是一個文件
作者: flw2    時間: 2007-06-06 14:31
tar會mkdir,你想得到dir名稱還是什么?

可能是因?yàn)椴涣私鈚ar,我真還不明白你要什么,我試圖努力看懂你說的,但是還是不明白。

你可以寫個函數(shù)聲明,我可以看看我會不會實(shí)現(xiàn)這個函數(shù)。
作者: NewCore    時間: 2007-06-06 14:48
原帖由 flw2 于 2007-6-6 14:31 發(fā)表于 29樓  
tar會mkdir,你想得到dir名稱還是什么?

可能是因?yàn)椴涣私鈚ar,我真還不明白你要什么,我試圖努力看懂你說的,但是還是不明白。

你可以寫個函數(shù)聲明,我可以看看我會不會實(shí)現(xiàn)這個函數(shù)。


稍等,我在回復(fù),為了說的詳細(xì),花點(diǎn)時間.
作者: NewCore    時間: 2007-06-06 14:57
原帖由 flw2 于 2007-6-6 14:31 發(fā)表于 29樓  
tar會mkdir,你想得到dir名稱還是什么?

可能是因?yàn)椴涣私鈚ar,我真還不明白你要什么,我試圖努力看懂你說的,但是還是不明白。

你可以寫個函數(shù)聲明,我可以看看我會不會實(shí)現(xiàn)這個函數(shù)。




to flw2:

沒有冒犯的意思,沒想到我的表述能力如此之差...我一直試圖把問題說得明白點(diǎn),盡管就像我開始說的,這個問題很怪異...

tar確實(shí)不是一個文件,但是我這樣執(zhí)行tar -zxvf file.tar,那么tar在執(zhí)行的時候就會把tar包中的文件名輸出到標(biāo)準(zhǔn)輸出,如果是屏幕,就看到一行一行的解包出來的文件名.

OK,我要的就是這所有的文件名.這里關(guān)鍵是,我需要在tar命令執(zhí)行的同時,獲得這個文件名,而不是tar執(zhí)行完.

我用了上面的方法,但是沒有用.原因是,tar命令執(zhí)行完才把包中的文件名輸出到標(biāo)準(zhǔn)輸出.(假如我們沒有重定向,什么都沒做).這是不符合我的需求的.

如果你覺得一個接口更能說明問題,那么可以認(rèn)為就這樣的一個接口
int my_tar(char * _tar_filename)
{
}
他做得事就是
1 解包file.tar.gz
2 同時把file.tar.gz包中的文件的名字(文件名字符串)保存到文件a.out中.

至于如何讀出來,那不是問題了.現(xiàn)在就是這樣的一個簡單功能,如果是上面我列出來的方法,那就不用了.

謝謝你的關(guān)注,我期待的你的回復(fù)
作者: flw2    時間: 2007-06-06 15:12
呵呵,別用這么嚴(yán)重的詞,我明白你的意思了,你就是要文件名,但是卻不想完之后在出來,確實(shí)很奇怪。
你現(xiàn)在的問題是tar的輸出并沒有在文件出來的同時打印出來對嗎?
作者: NewCore    時間: 2007-06-06 15:17
原帖由 flw2 于 2007-6-6 15:12 發(fā)表于 32樓  
呵呵,別用這么嚴(yán)重的詞,我明白你的意思了,你就是要文件名,但是卻不想完之后在出來,確實(shí)很奇怪。
你現(xiàn)在的問題是tar的輸出并沒有在文件出來的同時打印出來對嗎?



完全正確
作者: flw2    時間: 2007-06-06 15:22
為什么不能等它完了,而且我跟蹤了一下,好像是先打印的呀。


rmdir("misc.o")                         = -1 ENOTDIR (Not a directory)
unlink("misc.o")                        = 0
open("misc.o", O_WRONLY|O_CREAT|O_EXCL|O_LARGEFILE, 0644) = 4
write(4, "\37\213\10\0;\274VF\0\3\355\301\1\r\0\0\0\302\240\367O"..., 45) = 45
作者: flw2    時間: 2007-06-06 15:23
就是說它是先打印名字,然后再生成文件的。
作者: flw2    時間: 2007-06-06 15:25
我知道了,通常tar是行緩沖的,但是當(dāng)你定向到文件a.out的時候成為全緩沖了。
作者: flw2    時間: 2007-06-06 15:27
定向到管道也沒有用。如果你非要立馬取結(jié)果,那么我現(xiàn)在暫時有兩種辦法

1.偽終端
2.該tar的代碼

1不需要改代碼,但是需要稍微折騰一下。
2很簡單
作者: flw2    時間: 2007-06-06 15:28
樓主
你的條件,不能等待是很嚴(yán)格嗎?要不結(jié)束之后再遍歷一下多簡單
作者: NewCore    時間: 2007-06-06 15:35
原帖由 flw2 于 2007-6-6 15:25 發(fā)表于 36樓  
我知道了,通常tar是行緩沖的,但是當(dāng)你定向到文件a.out的時候成為全緩沖了。



是的! 不只是到a.out,重定向到管道的時候,也沒有數(shù)據(jù),后來我才發(fā)現(xiàn)這其實(shí)是一個問題.
作者: NewCore    時間: 2007-06-06 15:36
原帖由 flw2 于 2007-6-6 15:27 發(fā)表于 37樓  
定向到管道也沒有用。如果你非要立馬取結(jié)果,那么我現(xiàn)在暫時有兩種辦法

1.偽終端
2.該tar的代碼

1不需要改代碼,但是需要稍微折騰一下。
2很簡單



現(xiàn)在我也只好用2種辦法,還在折騰中.
作者: NewCore    時間: 2007-06-06 15:36
原帖由 flw2 于 2007-6-6 15:28 發(fā)表于 38樓  
樓主
你的條件,不能等待是很嚴(yán)格嗎?要不結(jié)束之后再遍歷一下多簡單



這樣對我的應(yīng)用來說就沒有任何意思,我需要其實(shí)就是把文件名拿來顯示到自己的UI上.
作者: flw2    時間: 2007-06-06 15:37
很好辦,它確實(shí)是到輸出,直接
main開頭,setbuf(stdout,NULL);
作者: NewCore    時間: 2007-06-06 15:39
to flw2:

我現(xiàn)在下載了個busybox上的tar的源代碼,現(xiàn)在可以編到我自己的程序里了,但是tar執(zhí)行的時候出現(xiàn)了錯誤,還在修改中

看來是沒有其他頒發(fā)了,后續(xù)有問題我在請教吧.或者你有可用的tar得源碼? 那就省了我很多事了.
作者: NewCore    時間: 2007-06-06 15:40
原帖由 flw2 于 2007-6-6 15:37 發(fā)表于 42樓  
很好辦,它確實(shí)是到輸出,直接
main開頭,setbuf(stdout,NULL);



這個我試過了阿,本貼中,我貼出來的代碼就做過這樣的嘗試啊....
作者: NewCore    時間: 2007-06-06 15:41
這個是我發(fā)在前面貼子里的:

各位,我按照昨天的提示,打開文件時設(shè)置同步標(biāo)志,然后加上了緩沖設(shè)置,如下:

void * bk_thread(void *)
{
    int fd;
    FILE * fp;
    char linebuf[BUFLEN + 1];

    fd = open("a.out", O_CREAT | O_RDWR | O_SYNC);   /* a.out 作為保存輸出信息的文件, */

/*************設(shè)置為行緩沖*******************/   
    fp = fdopen(fd, "w+");
    setvbuf(fp, linebuf, _IOLBF, BUFLEN);
/*****************************************/   
    dup2(fd, 1)

    if(0 == fork())
    {
        system("tar ... >&1");        /* 故意加 >&1 到輸出,實(shí)際上到a.out文件 */
        exit(1);
    }
   
    int fd_dup;
    int count;

    fd_dup = dup(fd);    /* 后面用fd_dup來操作 */

    while((count = read()) >= 0)         /* 這里count一直=0,除非system()返回,那個時候數(shù)據(jù)才被寫道文件a.out中 */
    {
        if(count == 0)                /* 數(shù)據(jù)為0,判斷子進(jìn)城是否結(jié)束,結(jié)束就退出,沒結(jié)束sleep一下后繼續(xù)去讀 */
        {
            
        }
        else                        /* 處理讀出來的數(shù)據(jù) */
        {
        }      
    }   
}

現(xiàn)在還是讀不出來數(shù)據(jù)。
作者: flw2    時間: 2007-06-06 15:43
原帖由 NewCore 于 2007-6-6 15:40 發(fā)表于 44樓  



這個我試過了阿,本貼中,我貼出來的代碼就做過這樣的嘗試啊....


老大,這個要在tar的main函數(shù)中,
作者: flw2    時間: 2007-06-06 15:44
我有源碼,這些不都是公開的嗎。busybox里的tar也有個main函數(shù)呀,你在關(guān)鍵地方檢察一下,比如
if (argv[0] == "tar")
setbuf NULL
作者: NewCore    時間: 2007-06-06 15:46
原帖由 flw2 于 2007-6-6 15:43 發(fā)表于 46樓  


老大,這個要在tar的main函數(shù)中,



恩啊,了解了.

現(xiàn)在我還是把tar搞到我自己的程序里吧.

現(xiàn)在在解包的時候還有點(diǎn)錯誤,折騰啊
作者: flw2    時間: 2007-06-06 15:49
你允許該busybox?那就很簡呀,別改太多,改動不會超過5行
作者: NewCore    時間: 2007-06-06 15:50
原帖由 flw2 于 2007-6-6 15:44 發(fā)表于 47樓  
我有源碼,這些不都是公開的嗎。busybox里的tar也有個main函數(shù)呀,你在關(guān)鍵地方檢察一下,比如
if (argv == "tar")
setbuf NULL



恩啊,我明白了

實(shí)在不行,我可以直接把busybox里面的tar_main里面加上setbuf NULL,然后把tar命令生成后copy到我們自己的系統(tǒng)上,我們系統(tǒng)上的命令本來也就是用busybox生成的....
作者: NewCore    時間: 2007-06-06 15:51
to flw2

應(yīng)該是這樣的吧.?
作者: flw2    時間: 2007-06-06 15:54
放在tar_main不一定可以,如果以前沒有printf確實(shí)可以

你要是很自由的改代碼,直接main函數(shù)前面加個setbuf也沒有什么關(guān)系

不過個人認(rèn)為你的做法實(shí)在是不可取
作者: NewCore    時間: 2007-06-06 16:00
原帖由 flw2 于 2007-6-6 15:54 發(fā)表于 52樓  
放在tar_main不一定可以,如果以前沒有printf確實(shí)可以

你要是很自由的改代碼,直接main函數(shù)前面加個setbuf也沒有什么關(guān)系

不過個人認(rèn)為你的做法實(shí)在是不可取



這作為最后的辦法把,我現(xiàn)在還是先把tar搞到我自己的代碼里,這樣應(yīng)該是現(xiàn)在比較合適的解決辦法了.

多謝你的回復(fù),遇上這樣的問題,郁悶死我了,都說蠻簡單個事,我做了一個星期了....
作者: MMMIX    時間: 2007-06-06 16:16
原帖由 NewCore 于 2007-6-6 16:00 發(fā)表于 53樓  



這作為最后的辦法把,我現(xiàn)在還是先把tar搞到我自己的代碼里,這樣應(yīng)該是現(xiàn)在比較合適的解決辦法了.

多謝你的回復(fù),遇上這樣的問題,郁悶死我了,都說蠻簡單個事,我做了一個星期了....

因?yàn)槟阋恢眻?jiān)持要用 system 函數(shù)。
作者: NewCore    時間: 2007-06-06 16:19
原帖由 MMMIX 于 2007-6-6 16:16 發(fā)表于 54樓  

因?yàn)槟阋恢眻?jiān)持要用 system 函數(shù)。






老大說的是,我承認(rèn)我可能是有點(diǎn)轉(zhuǎn)牛角尖了,但是system并不是問題的關(guān)鍵吧...
作者: MMMIX    時間: 2007-06-06 16:23
原帖由 NewCore 于 2007-6-6 16:19 發(fā)表于 55樓  






老大說的是,我承認(rèn)我可能是有點(diǎn)轉(zhuǎn)牛角尖了,但是system并不是問題的關(guān)鍵吧...

這個我覺得你錯了。system 會啟動一個 shell 來執(zhí)行你的命令,天知道這個 shell 都會做些什么。
作者: mirnshi    時間: 2007-06-06 19:25
用unix-socket,測試了一下,可以得到輸出。
server: 打開socket, system執(zhí)行客戶端,等待客戶端的輸入
client: 打開socket,建立連接,然后復(fù)制到0,1,2句柄上,再exec執(zhí)行tar,服務(wù)端就可以讀到tar的輸出了。
作者: NewCore    時間: 2007-06-06 22:48
原帖由 mirnshi 于 2007-6-6 19:25 發(fā)表于 57樓  
用unix-socket,測試了一下,可以得到輸出。
server: 打開socket, system執(zhí)行客戶端,等待客戶端的輸入
client: 打開socket,建立連接,然后復(fù)制到0,1,2句柄上,再exec執(zhí)行tar,服務(wù)端就可以讀到tar的輸出了。



一般情況下,這樣做是肯定沒有問題的。我代碼在redhat9上也跑得好好的,但是到了我們板子上的系統(tǒng)上就搞不定了...

其實(shí),很多時候時間都耗在這些意外上,如果事事都在“一般情況下”,那這個世界就太完美了...
作者: ulovko    時間: 2012-04-26 14:54
跟大家學(xué)習(xí)真好!




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