2015-02-08 29 views
-4

爲什麼write(1, lol, 1);行在main函數中不起作用?它只是空白,並返回值爲0結束的程序,但當我打電話功能filecopy(0,1),它的作品?爲什麼write()標準輸出不工作?

編輯:我包括"syscall.h"

int main(void) 
{ 
    ///// filecopy(0,1) 
    char lol = 'D'; 
    write(1, lol, 1); 
    return 0; 
} 

void filecopy(int from, int to) 
{ 
    int n; 
    int buf[100]; 

    while((n=read(from, buf, 100)) > 0) 
    write(to, buf, n); 
} 
+1

打開編譯器的警告並修復報告的問題。 – Mat 2015-02-08 19:35:24

+2

在''中聲明瞭POSIX函數'read()'和'write()'。你應該很少需要''syscall.h'' - 我曾經在我的職業生涯中使用過它,那是爲了訪問一個系統調用,手冊上說「這個系統調用沒有功能」。 – 2015-02-08 19:36:57

+0

請注意,您的'n'類型錯誤 - 它應該是'size_t'(或'ssize_t'),而不是'int'。傳遞給'read'的大小應該是'100 * sizeof(int)',而不是'100'(要麼是使用'buff'而是'char'而不是'int')。 – 2015-02-08 19:39:57

回答

1

在你filecopy()功能,你接到電話到write()權。

write(to, buf, n); //buf is a pointer. 

在你main()代碼,問題是在該行

write(1, lol, 1);  // lol is of type char, it's not an address. 

的第二個參數write()應該是一個void *。更改爲

write(1, &lol, 1); 

強烈建議在編譯器中啓用警告,並查看並修復編譯器發出的警告。

相關問題