我想在C中使用低級別的函數,並希望從STDIN讀取並將該信息存儲在文件中。低級別的I/O - 讀取/創建/寫入(C)
int dash, c;
char buffer[1024];
if((dash = creat("file.txt", S_IRWXU)) < 0)
perror("creat error");
while ((c = read(STDIN_FILENO, buffer, sizeof(buffer))) > 0) {
if (write(dash, buffer, c) != c)
perror("write error");
我在理解如何訪問'file.txt'來讀取它以打印到屏幕或存儲到另一個文件時遇到問題。我會用'read(「file.txt」,buffer,sizeof [buffer])'嗎?
編輯 現在創建 「file.txt」,但之後我想打開另外一個文件,可以說文件1(的argv [3]),並轉儲文件 「file.txt」 到文件1(agrv [3])。這會工作嗎?
fd = open(argv[3], O_RDWR); //open 3rd arg for writing
fd_2 = open("file.txt", O_RDWR); //open created file
do {
n = read(fd_2, buffer, sizeof(buffer));
if (n < 0)
perror("read error argv[2]"); //greater 0=succesful
write(STDOUT_FILENO, buffer, n); // this is where I'm stuck
} while (n == sizeof(buffer));
close(fd);
我有兩個文件現在打開,但無法弄清楚如何將「file.txt」寫入argv [3]。
如果你使用'科瑞()',你將清除文件的以前的內容;它是空的。沒有什麼可讀的。 –
但是,如果這是第一次「file.txt」正在寫入,我應該仍然能夠從中讀取它的內容複製到另一個文件嗎? – MBan
如果文件已創建,則爲空。當然,如果您願意,可以將零字節複製到另一個文件中,但這是毫無意義的練習。在'creat()'之後,在文件中寫入一些數據之前,文件中沒有任何東西需要讀取。 POSIX定義['creat()'](http://pubs.opengroup.org/onlinepubs/9699919799/functions/creat.html)說:_'' creat()'函數的行爲應該如下執行: 'int creat(const char * path,mode_t mode) { return open(path,O_WRONLY | O_CREAT | O_TRUNC,mode); }'_因此當你使用'creat()'時,文件描述符是不可讀的。 –