2013-02-28 29 views
0
#include <stdio.h> 
#include <unistd.h> 
#include <sys/stat.h> 
#include <sys/types.h> 
#include <fcntl.h> 

int main(int argc,char *argv[]) 
{ 
    int fd; 
    int i=1; 
    for(i=1;i<argc;++i) 
    { 
     char temp; 
     fd=open(argv[i],"O_RDWR"); 
     if (fd==-1) 
      perror("file:"); 
     while (read(fd,&temp,1)!=EOF) 
     { 
      putchar(temp); 
     } 
    } 
} 

我執行./a.out a bab是我的目錄中的文件。我收到一個錯誤,說File exists。 行open(argv[i],"O_RDWR")未打開該文件。當標誌是字符串指針而不是int時,open()函數錯誤

自文件存在以來它返回-1。那麼我應該如何使用open系統調用打開文件?

+1

如果你已經編譯了警告,你肯定會得到一個這個程序。 – 2013-02-28 19:02:48

+0

flags參數是一串位,用無符號整數表示。誰知道什麼無意義的標誌通過了... – vonbrand 2013-02-28 19:31:45

回答

5
fd=open(argv[i],"O_RDWR"); 
       ^ ^

你傳遞一個char *,而不是一個整型常量。放下",應該只是:

fd = open(argv[i], O_RDWR); 

有趣的是,但可能偏離主題,open一定以爲你通過O_CREAT | O_EXCL,這就是爲什麼它抱怨該文件已經存在。


所以我已經wriiten是正確的,然後???但代碼進入一個無限 看印刷沒什麼

功能read(2)不會在輸入和返回EOF而是0

+0

+1因爲這些宏是不是字符串。 – squiguy 2013-02-28 18:51:45

+0

好的...謝謝...還有一件事是什麼第二arguenent閱讀??手冊頁說它是無效的* buf ...我不明白 – Nikhil 2013-02-28 19:23:16

+0

@Nikhil這是一個緩衝區,其中'read(2)'將存儲它讀取的東西。它必須準備好至少把第三個參數指定的數量保存到'read'中。 – cnicutar 2013-02-28 19:24:31

相關問題