檔案管理I/O筆記
1.檔案一共有六中型別:連結檔案l,普通檔案-,裝置檔案(字元檔案和塊檔案),管道檔案p,套接字檔案,目錄檔案
2.檔案的一些函式的基本的使
檔案的開啟許可權,基本上是0666,更具w對應為2,r對應為4,x對應為1
幾個函式:
creat("./helo",0666)//
chdir("/tmp");//修改檔案的主目錄,這樣檔案的位置就不是在當前位置了,在其它檔案下建立可能儲蓄哦
perror(fd);//顯示上一個出錯的函式,本身就帶著:
3.寫入出錯時,很可能就是檔案的許可權的問題
注意點:如果又想建立,又想檔案的讀寫,則最好用open 函式
open(開啟檔案) | |
相關函式 | read,write,fcntl,close,link,stat,umask,unlink,fopen |
表標頭檔案 | #include<sys/types.h>#include<sys/stat.h>#include<fcntl.h> |
定義函式 | int open( const char * pathname, int flags);int open( const char * pathname,int flags, mode_t mode); |
lseek(移動檔案的讀寫位置) | |
相關函式 | dup,open,fseek |
表標頭檔案 | #include<sys/types.h>#include<unistd.h> |
定義函式 | off_t lseek(int fildes,off_t offset ,int whence); |
函式說明 | 每一個已開啟的檔案都有一個讀寫位置,當開啟檔案時通常其讀寫位置是指向檔案開頭,若是以附加的方式開啟檔案(如O_APPEND),則讀寫位置會指向檔案尾。當read()或write()時,讀寫位置會隨之增加,lseek()便是用來控制該檔案的讀寫位置。引數fildes 為已開啟的檔案描述詞,引數offset 為根據引數whence來移動讀寫位置的位移數。 |
引數 | whence為下列其中一種:SEEK_SET 引數offset即為新的讀寫位置。SEEK_CUR 以目前的讀寫位置往後增加offset個位移量。SEEK_END 將讀寫位置指向檔案尾後再增加offset個位移量。當whence 值為SEEK_CUR 或SEEK_END時,引數offet允許負值的出現。下列是教特別的使用方式:1) 欲將讀寫位置移到檔案開頭時:lseek(int fildes,0,SEEK_SET);2) 欲將讀寫位置移到檔案尾時:lseek(int fildes,0,SEEK_END);3) 想要取得目前檔案位置時:lseek(int fildes,0,SEEK_CUR); |
返回值 | 當呼叫成功時則返回目前的讀寫位置,也就是距離檔案開頭多少個位元組。若有錯誤則返回-1,errno 會存放錯誤程式碼。 |
附加說明 | Linux系統不允許lseek()對tty裝置作用,此項動作會令lseek()返回ESPIPE。 |
#include<sys/types.h>//是Unix/Linux系統的基本系統資料型別的標頭檔案,含有size_t,time_t,pid_t等型別。 #include<sys/stat.h>//獲取一些檔案相關的資訊 #include<fcntl.h>//這個是為了使用fcntl.h定義了很多巨集和open,fcntl函式原型 #include<stdio.h> #include<errno.h>//用strerror(error) int main() { int fd; //11 umask(0);//填充0表示獎mask 程式設計0,只使用程式中的這個值,不需要減去系統中的值 fd=creat("./helo",0666); if(fd==-1) { perror("create error"); return -1; } printf("%d",fd); int i; for(i=0;i<10;i++) { printf("第%d :%s\n",i,strerror(i));//這時候要用: } int fd; //22 fd=open("./helo.txt",O_RDONLY|O_CREAT,0666|O_RDWR);//不存在就建立檔案 if(-1==fd) { //33 printf("%s",strerror(errno));//這時候要用:printf perror("open error");//根據上一個呼叫的函式t,後面不要加冒號 return -1; } printf("%d",fd);//這裡檔案fd為檔案描述符,輸出到標準輸出裡面去,不是輸出到螢幕上 close(fd); return 0; } //檔案讀寫 #include<fcntl.h> #include<stdio.h> #include<errno.h>//用strerror(error) #include<unistd.h> int main() { int fd; fd=open("helo",O_RDWR|O_CREAT,0666); if(fd==-1) { perror("create error"); return -1; } char buf[10]="hell0"; int a=write(fd,buf,strlen(buf)); if(-1==a) { perror("write error"); return -1; } printf("%d\n",a); lseek(fd,0,SEEK_SET); // lseek(fd,-12,SEEK_CUR);//當前位置前12個 int b=read(fd,buf,10);//位置胡相後 if(-1==b) { perror("read error"); return -1; } printf("%d",b); buf[a]='\0'; printf("buf:%s",buf); return 0; }4.記憶體空間的劃分:
堆:從malloc()分配的記憶體,程式由os分配,沒回收會導致程式洩露,free()可以用來回收
棧:區域性變數放在棧上。當一個函式返回時,所有的棧空間被收回
常量區:不允許被修改,入“helloworld”,當程式退出時被釋放,所以期間時一直存在的
程式碼區:也不能被修改
全域性區:全域性初始化區和未初始化區
int t=1; int t;預設為0
靜態儲存區:和全域性區相連 static宣告的變數,裡面的值也預設為0
#include <stdio.h>
#include <stdlib.h>
char *func()
{
char *s="hello";//
return s;
}
char *fun2()
{
char p[]="為為為為為";//而這個時存在棧空間的,呼叫結束函式返回時,裡面陣列所有的空間被釋放調,但是地址是還在的,只是裡面沒樹了
return p;
}
int main(void) {
char *s=NULL;
char *q=NULL;
s=func();//hello的首地址
q=fun2();//結果是亂碼或者是出現斷錯誤
printf("%s\n",s);
printf("%s\n",q);
//puts("!!!Hello World!!!"); /* prints !!!Hello World!!! */
return EXIT_SUCCESS;
}
檢驗檔案是否可讀:
int ret=access(argv[1],R_OK|F_OK);
if(ret==-1)
{
perror("access");
}
else
{
printf("[%s] exist and executeable",argv[1]);
}
if(fd1==-1)
{
perror("source file wrong");
return -1;
}
相關文章
- 檔案I/O
- I/O程式設計技術(檔案IO)筆記綱要梳理程式設計筆記
- Java學習筆記之I/O流(讀取壓縮檔案以及壓縮檔案)Java筆記
- OpenCV學習筆記(六)——對XML和YAML檔案實現I/O操作OpenCV筆記XMLYAML
- nodejs筆記-非同步I/ONodeJS筆記非同步
- Java學習筆記之I/OJava筆記
- Python:讀寫檔案(I/O) | 組織檔案Python
- I/O埠和I/O記憶體記憶體
- I/O流以及檔案的基本操作
- 一起學Scala 檔案 I/O
- 【Oracle-記憶體管理】-Multiple I/O SlavesOracle記憶體
- 6.管理控制檔案(筆記)筆記
- 【Java I/O】如何用Java讀寫檔案Java
- 通過移動資料檔案來均衡檔案I/O
- 透過移動資料檔案來均衡檔案I/O
- 006零基礎學Python:Python 檔案I/O和File方法--學習筆記Python筆記
- ORACLE UTL_FILE檔案包的應用,檔案I/O操作Oracle
- InnoDB 中文參考手冊 --- 12 檔案空間管理和磁碟 I/O (轉)
- Java I/O流 複製檔案速度對比Java
- 結合 Go 讀 APUE-基本檔案I/OGo
- 為Oracle檔案分割槽以避免I/O爭用Oracle
- 嵌入式C語言強化筆記--__I、 __O 、__IOC語言筆記
- 讀書筆記 Improving Database Performance With AIX Concurrent I/O筆記DatabaseORMAI
- 第二十章:非同步和檔案I/O.(九)非同步
- 第二十章:非同步和檔案I/O.(八)非同步
- 第二十章:非同步和檔案I/O.(一)非同步
- 第二十章:非同步和檔案I/O.(二)非同步
- 第二十章:非同步和檔案I/O.(十四)非同步
- Python中檔案I/O高效操作處理的技巧Python
- Java-0024-用I/O實現拷貝檔案Java
- 筆記:Linux命令(目錄和檔案管理)筆記Linux
- Veritas Quick I/O and Cached Quick I/OUI
- 設計模式中巧記I/O設計模式
- 計算機I/O與I/O模型計算機模型
- Object C學習筆記25-檔案管理(一)Object筆記
- Object C學習筆記26-檔案管理(二)Object筆記
- 《專案管理》-筆記1專案管理筆記
- 《專案管理》-筆記2專案管理筆記