1. 程式人生 > >有趣的C語言--檔案結尾和重定向

有趣的C語言--檔案結尾和重定向

1.檔案結尾

計算機需要用某種方式來知道檔案的起始和結尾,可以通過以下方法來做這個檢測。

  1. 檢測結尾的方法是在檔案中放置一個特殊字元來標誌結尾,這是在例如CP/M、IBM-DOS和MS-DOS的文字檔案中曾使用的一種方法。比如可以內嵌一個CTRL+Z來標誌檔案結尾^Z。
  2. 另外一種方法是讓作業系統儲存檔案大小的資訊,如果一個檔案有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.規則:

  1. 重定向符號將一個可執行檔案與資料檔案連線
  2. 不能用於資料檔案與資料檔案的連線
  3. 輸入和輸出都不能來自一個以上的檔案

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;
}