有趣的C語言--檔案結尾和重定向
阿新 • • 發佈:2019-02-07
1.檔案結尾
計算機需要用某種方式來知道檔案的起始和結尾,可以通過以下方法來做這個檢測。
- 檢測結尾的方法是在檔案中放置一個特殊字元來標誌結尾,這是在例如CP/M、IBM-DOS和MS-DOS的文字檔案中曾使用的一種方法。比如可以內嵌一個CTRL+Z來標誌檔案結尾^Z。
- 另外一種方法是讓作業系統儲存檔案大小的資訊,如果一個檔案有100位元組的大小,那麼如果程式已經從這個檔案讀取了100位元組,那就表示這已經到了檔案結尾。Unix對所有檔案都使用此方法。
對於這兩種方法,C的處理方法是讓getchar()函式在到達檔案結尾時返回一個特殊值。賦予該值的名稱是EOF(End of file)。在stdio.h中定義如下#define EOF(-1)。-1是因為getchar()返回一個範圍在0-127之間的值。
#include<stdio.h>
int main()
{
int ch;
while((ch=getchar())!=EOF)
{
//現在結束程式改為CTRL+Z
//有些系統是CTRL+D為檔案結尾訊號
putchar(ch);
}
return 0;
}
我們可以嘗試輸出:
1111
1111
2222
2222
ctrl^z //回車後,程式將結束
2.重定向
1.輸入重定向
當我們需要將其他文字中的內容輸出到控制檯可以使用輸入重定向
新建在同一目錄下建立word.txt,寫入this is word.txt
cmd下執行 echo_eof <word.txt ( < 為輸入重定向符號 )
2.輸出重定向
echo_eof >word.txt(將控制檯內容輸出到word.txt,但是會覆蓋原來的)
>>則是從末尾輸入
3.組合重定向
echo < word.txt >a.txt (從控制檯輸出到word.txt,再輸入到a.txt) 注意 word.txt可以不存在,但是a.txt必須存在
4.還有>& <& |
5.規則:
- 重定向符號將一個可執行檔案與資料檔案連線
- 不能用於資料檔案與資料檔案的連線
- 輸入和輸出都不能來自一個以上的檔案
c從檔案讀取資料
#include<stdio.h>
#include<stdlib.h>
int main()
{
int ch;
FILE * fp;
char fname[50];//用於存放檔名
printf("Enter the name of file\n");
scanf("%s",fname);
fp=fopen(fname,"r");//以只讀方式開啟檔案
if(fp==NULL)
{
printf("faile to open file\n");
exit(1);
}
// getc(fp)從開啟檔案中獲取一個字元
while((ch=getc(fp))!= EOF)
{
putchar(ch);
}
fclose(fp);
return 0;
}