我只想寫入文件描述符的是輸入字符串。但是,它也會寫入在fprintf中傳遞的錯誤消息。有人能解釋爲什麼它的行爲如此嗎?這個小程序顯示了行爲。爲什麼stdio.h會打印寫入用文件描述符打開的文件?
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
int main(void)
{
int fd;
mode_t mode = S_IRUSR | S_IWUSR;
char *filename = "file.txt";
char *input = "hello world";
char output[20];
// create and close
if((fd = open(filename, O_RDWR | O_CREAT | O_TRUNC, mode)) == -1)
{
fprintf(stderr, "Error.\n");
return -1;
}
close(fd);
// just open
if((fd = open(filename, O_RDWR, mode)) == -1)
{
fprintf(stderr, "Error.\n");
return -1;
}
if(write(fd, input, 200) == -1)
{
fprintf(stderr, "Error.\n");
return -1;
}
// move back to beginning
if(lseek(fd, 0, SEEK_SET) == -1)
{
return -1;
}
if(read(fd, &output, 200) == -1)
{
fprintf(stderr, "Error.\n");
return -1;
}
printf("%s\n", output);
return 0;
}
你沒有向我們展示足夠的程序來回答你的問題。請提供一個完整的例子。 – 2012-03-06 22:30:01
「即使達到它」是什麼意思?即使您的診斷程序正在打印,我似乎也得到了文件輸出似乎正在發生的要點。我懷疑你認爲發生的事情並不是真的發生,你只是以某種方式迷惑自己。請注意,您的open()調用不會截斷文件。你是否檢查open()成功,甚至?也許你並沒有真的打開文件,文件描述符實際上是不好的。但是當你看文件時,你正在查看正確的文件,並且數據在那裏。當您執行ls -l時,文件上的時間戳是什麼? – Kaz 2012-03-06 22:34:01
我只想寫入文件描述符的是塊中的內容。但是,當我在寫入文件後打開文件時,它包含塊中的消息以及所有fprintf消息,例如無法寫入。\ n – Kobi 2012-03-06 22:45:54