2014-02-25 39 views
0

我試圖在.txt文件中寫入變量environ的內容。C中的open()和write()函數

int archivo = open(argv[1], "rw"); 
int i=0; 
while(environ[i]!=NULL){ 
    write(archivo, environ[i], 1024); 
    i++; 
} 

該文件已創建,但未添加任何內容。有誰知道爲什麼?

+0

http://stackoverflow.com/questions/2229377/writing-an-整數到一個文件與fputs – Tschallacka

+2

你是混亂'開放(常量字符*路徑名,詮釋標誌)'和'fopen(常量字符*路徑,常量字符*模式)' – aland

+0

是的,但事情是我想用寫命令來做 –

回答

3
  1. 諮詢man 2 open以獲得open的正確參數。它應該是:

    open(argv[1], O_WRONLY | O_CREAT | O_TRUNC); 
    
  2. 你應該只寫廣告多,你實際上有:

    write(archivo, environ[i], strlen(environ[i])); 
    
  3. 你必須確保你寫的東西真的離開緩衝區:

    size_t string_length = strlen(environ[i]); 
    size_t wrote = 0; 
    while (wrote < string_length) { 
        size_t bytes_wrote = write(archivo, environ[i] + wrote, string_length - wrote); 
        if (bytes_wrote >= 0) 
         wrote += bytes_wrote; 
        else { 
         perror("write"); 
         abort(); 
        } 
    } 
    

    write並不保證您提交的所有內容都將被寫入。

理想情況下,你應該尋找更爲程序員友好stdio電話fopenfwrite

FILE * fp = fopen(argv[1], "w"); 

// loop i 
if (!fwrite(environ[i], strlen(environ[i]), 1, fp)) { 
    perror("fwrite"); 
    abort(); 
} 
+0

其實,這不應該是'strlen(environ [i])+ 1'嗎? (或者跟隨每個寫有某種分隔符?) –

+1

@ElchononEdelson,除非你正在編寫二進制文件,否則寫出空終止符也是一個壞主意。分隔符不會是一個壞主意,但:)。但這不是問題的一部分。 –

+1

確實這不是問題的一部分,但你仍然需要這個或那個。 –

0

我相信你必須改變你的標誌來打開一個文件。 「rw」不適用於open(),它適用於fopen()。

open(argv[1], O_WRONLY); 

我覺得是寫使用開放

編輯文件所需的最小:我找到了一個鏈接http://pubs.opengroup.org/onlinepubs/009696899/functions/open.html

+0

http://pubs.opengroup.org/onlinepubs/9699919799/functions/open.html –

+0

有趣。不知何故,谷歌給了我一個過時的鏈接。謝謝。 – Solidus

相關問題