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 出錯