我試圖在.txt文件中寫入變量environ
的內容。C中的open()和write()函數
int archivo = open(argv[1], "rw");
int i=0;
while(environ[i]!=NULL){
write(archivo, environ[i], 1024);
i++;
}
該文件已創建,但未添加任何內容。有誰知道爲什麼?
我試圖在.txt文件中寫入變量environ
的內容。C中的open()和write()函數
int archivo = open(argv[1], "rw");
int i=0;
while(environ[i]!=NULL){
write(archivo, environ[i], 1024);
i++;
}
該文件已創建,但未添加任何內容。有誰知道爲什麼?
諮詢man 2 open
以獲得open
的正確參數。它應該是:
open(argv[1], O_WRONLY | O_CREAT | O_TRUNC);
你應該只寫廣告多,你實際上有:
write(archivo, environ[i], strlen(environ[i]));
你必須確保你寫的東西真的離開緩衝區:
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
電話fopen
和fwrite
。
FILE * fp = fopen(argv[1], "w");
// loop i
if (!fwrite(environ[i], strlen(environ[i]), 1, fp)) {
perror("fwrite");
abort();
}
其實,這不應該是'strlen(environ [i])+ 1'嗎? (或者跟隨每個寫有某種分隔符?) –
@ElchononEdelson,除非你正在編寫二進制文件,否則寫出空終止符也是一個壞主意。分隔符不會是一個壞主意,但:)。但這不是問題的一部分。 –
確實這不是問題的一部分,但你仍然需要這個或那個。 –
我相信你必須改變你的標誌來打開一個文件。 「rw」不適用於open(),它適用於fopen()。
open(argv[1], O_WRONLY);
我覺得是寫使用開放
編輯文件所需的最小:我找到了一個鏈接http://pubs.opengroup.org/onlinepubs/009696899/functions/open.html
http://pubs.opengroup.org/onlinepubs/9699919799/functions/open.html –
有趣。不知何故,谷歌給了我一個過時的鏈接。謝謝。 – Solidus
http://stackoverflow.com/questions/2229377/writing-an-整數到一個文件與fputs – Tschallacka
你是混亂'開放(常量字符*路徑名,詮釋標誌)'和'fopen(常量字符*路徑,常量字符*模式)' – aland
是的,但事情是我想用寫命令來做 –