2010-07-20 文件編程 筆記

1、Linux中文件編程的兩種方法:

                                              1)Linux系統調用(依賴Linux操作系統)

                                              2)C語言庫函數(不依賴Linux操作系統,在任何操作系統下,使用C語言庫函數的操作都是一樣)

2、Linux系統調用:

                         1)創建文件 int creat(const char * filename ,mode_t mode)

                          filename 爲要創建的文件名(包含路徑,缺省爲當前路徑)

                          mode    爲文件的權限(1 爲可執行 2 爲可寫 4 爲可讀 7 爲可讀可寫可執行)

                          返回值 爲-1 創建失敗,0 創建成功

                          如  char filename[100];

                               creat(filename,0755); //0755中的數字分別代表 0 代表 八進制 7 代表文件所有者user 可讀可寫可執行 ;5 代表可讀可執

                                                               

#include <stdio.h>
#include <stdlib.h>

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

void  create_file(char *filename){

 if(creat(filename,0755)<0){
        printf("create file %s failure!/n",filename);
        exit(EXIT_FAILURE);
    }else{
        printf("create file %s success!/n",filename);
    }
}

int main(int argc,char *argv[]){
    int i;
    if(argc<2){
        perror("you haven't input the filename,please try again!/n");
        exit(EXIT_FAILURE);
    }

    for(i=1;i<argc;i++){
        create_file(argv[i]);   
    }

    exit(EXIT_SUCCESS);
}

註釋:argc 代表參數個數,argc 不小於1 ;argv 數字用來保存輸入時的字符串個數 ,例如在終端輸入:./creat_file hello  ;argc=2, argv[0] 就是./creat_file ; argv[1] 就是文件名hello

                       2)打開文件

                          (1)在Linux系統中,所有打開的文件都對應一個文件描述符,文件描述符的本質是一個非負整數。     

                          (2)  int open(const char * pathname, int flags)

                                   int open(const char * pathname,int flags,mede_t  mode ) 

                                   //pathname 要打開的文件名(包含路徑,缺省爲當前路徑)

                                   //flags 打開標誌 有如下的打開標誌: O_RDONLY(只讀);O_WRONLY(只寫); O_RDWR(讀寫);O_CREAT(創建一個文件,當文件不存在,就會創建一個文件);O_APPEND(追加)

                           (3)當打開標誌有多個時,用|分隔,如 O_RDWR | O_CREAT ,同時當打開標誌有O_CREAT 時,就要用3個參數的open函數了(即要帶有mode參數的函數)!

                           (4) mode 表示 文件的訪問權限 具體如  1)描述

                       3)關閉文件 int close (int fd) fd 爲文件描述符

                       4)讀取文件內容 int read(int fd,const void * buf,size_t length) 

                           // 功能爲從文件描述符fd所指定的文件中讀取length個字節到buf 所指向的緩衝區中,返回值爲實際讀取的字節數

                       5)寫文件   int  write (int fd ,const void * buf ,size_t length)

                           //功能爲 把length個字節從buf 指向的緩衝區中寫到文件描述符fd 所指向的文件總,返回值爲實際寫入的字節數

                       6)文件讀寫指針的定位 int lseek(int fd,offset_t offset ,int whence)

                          // 功能:將文件讀寫指針相對whence移動offset個字節,操作成功時,返回文件指針相對於文件頭的位置。

                         //whence可使用下述值: SEEK_SET(相對文件開頭);SEEK_CUR(相對與文件讀寫指針的當前位置);SEEK_END(相對文件末尾)

                         //offset   offset爲負值,表示向文件開頭方向移動;爲正值表示想文件末尾移動

                         //length=lseek(fd,0,SEEK_END) 返回值length爲文件的長度

                        7)判斷文件是否可以進行某種操作(讀,寫)int access(const char *pathname,int mode)

                         //filename 爲要創建的文件名(包含路徑,缺省爲當前路徑)

                         //mode 爲要判斷的訪問權限,可取:R_OK(判斷文件是否可讀);W_OK(判斷文件是否可寫);W_OK(判斷文件是否可執行);F_OK(判斷文件是否存在);

                         //返回 0 表示存在 -1 不存在

3、使用C語言庫函數進行文件編程

                         1)打開文件 FILE * fopen(const char * filename,const char *mode)

                              //filename:爲要創建的文件名(包含路徑,缺省爲當前路徑)

                              //mode    爲打開模式(a爲追加方式,w爲可寫 r爲可讀 r+ 和 w+爲可讀可寫 a+ 爲讀和追加)

                         2)讀文件內容 size_read fread(void * ptr ,size_t size ,size_t n,FILE * stream)              

                              //從stream指向的文件中讀取n 個字段,每個字段爲size 字節,並將讀取的數據放入ptr所指的字符數組中,返回實際已讀取的字節數

                         3)寫文件 size_write(const void * ptr,size_t size ,size_t n,FILE *stream)

                             //從緩衝區ptr所指的數組中吧n 個字段寫到stream 指向的文件中,每個字段長爲size 個字節,返回實際寫入的字段數

                         4) 從文件中讀一個字符 int fgetc(FILE * fp)

 

                             如:

                         fp=fopen("fgetc.txt","rt")                         5)寫一個字符到文件中  int fputc(char ch,FILE * fp)

                         ch=fgetc(fp);

                         while(ch!=EOF)

                           {

                             putchar(ch);

                             ch=fgetc(fp);

                           }

 

                              fp=fopen("fgetc.txt","w+")

                              ch=getchar();

                              while(ch!='/n')

                                    {

                                         fputc(ch ,fp)

                                         ch=getchar();

                                    }

                         6)int fseek(FILE * stream,long offset,int whence)       

                              // 功能:將文件讀寫指針相對whence移動offset個字節,操作成功時,返回文件指針相對於文件頭的位置。

                             //whence可使用下述值: SEEK_SET(相對文件開頭);SEEK_CUR(相對與文件讀寫指針的當前位置);SEEK_END(相對文件末尾)

                             // offset爲負值,表示向文件開頭方向移動;爲正值表示想文件末尾移動

                          7) 獲取當前程序的路徑  char * getcwd(char *buffer,intsize)             

                              // # include<  unistd.h>   

                             //char buf[80];                           

                             //getcwd(buf,sizeof(buf));

                            // 如果buf太小,會返回 -1

                           8)創建目錄 int mkdir(char * dir ,int mode)

                             // 返回0 成功,返回-1 出錯

 

    

               

                        

                         

                                 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章