系統程式設計之檔案系統程式設計

2021-08-05 19:15:25 字數 2847 閱讀 8889

系統呼叫:所有的作業系統都提供多種服務的入口點,程式由此向核心請求服務。這些可直接進入核心的入口點被稱為系統呼叫。

不同作業系統提供了自己的一套系統呼叫,所以系統呼叫無法實現跨平台使用。而且頻繁地系統呼叫,在使用者態和核心態之間切換,很耗費資源,效率不高。c標準庫提供了操作檔案的標準i/o函式庫,與系統呼叫相比,主要差別是實現了乙個跨平台的使用者態緩衝的解決方案。緩衝區可以減少系統呼叫的次數,提高執行效率。c標準庫是系統呼叫的封裝,在內部區分了作業系統,可實現跨平台使用。

1、開啟和關閉檔案:

系統呼叫函式:

函式原型:

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

int open(const char *pathname, int flags, mode_t mode);

int creat(const char *pathname, mode_t mode);

int close(int fd);
**示例:

int fd;

if (fd = open("test.txt",o_rdonly | o_creat,o_iwoth) == -1)

close(fd);

標準i/o函式:

函式原型:

file *fopen(const char *path, const char *mode);

file *fdopen(int fildes, const char *mode);

file *freopen(const char *path, const char *mode, file *stream);

int fclose(file *fp);
**示例:

file *fp = fopen("abc","a");

if(fp == null)

printf ("檔案開啟成功\n");

fclose (fp);

2、讀檔案和寫檔案:

系統呼叫函式:

函式原型:

ssize_t read(int fd, void *buf, size_t count);
ssize_t write(int fd, const void *buf, size_t count);
**示例(複製檔案):

int fd1 = open("1.ppt",o_rdonly);

if (fd1 == -1)

int fd2 = open("2.ppt",o_wronly | o_creat);

if (fd2 == -1)

int ret = 0;

char buf[size] = ;

while (ret = read(fd1,buf,size))

write (fd2,buf,ret);

}printf ("檔案複製成功\n");

close (fd1);

close (fd2);

標準i/o函式:

函式原型:

size_t fread(void *ptr, size_t size, size_t nmemb, file *stream);

size_t fwrite(const void *ptr, size_t size, size_t nmemb, file *stream);

**示例:

file *fp1 = fopen("1.ppt","a");

if(fp1 == null)

file *fp2 = fopen("1.ppt","a");

if(fp2 == null)

printf ("檔案開啟成功\n");

int ret = 0;

char buf[size] = ;

while (ret = fread(buf,sizeof(char),size,fp1))

if (ret == 0 && !feof(fp1))

printf ("檔案複製成功\n");

3、移動檔案偏移指標:

系統呼叫函式:

函式原型:

off_t lseek(int fildes, off_t offset, int whence);
**示例1:

int fd;

if ((fd = open("test",o_rdwr | o_creat,0777)) == -1)

lseek (fd,15,seek_set);

write(fd,"abc",4);

close(fd);

**例項2:(建乙個1g的大檔案)

int fd;

if ((fd = open("big",o_rdwr | o_creat,0777)) == -1)

lseek (fd,1024*1024*1024,seek_set);

write(fd,"\0",1);

close(fd);

Linux系統程式設計之檔案程式設計

目錄 一 檔案程式設計 1 linux檔案 2 檔案描述符 file descriptor 3 常用api open write read lseek close 1 open 開啟檔案函式 2 close 關閉檔案 3 write 寫檔案 4 read 讀檔案 5 lseek 游標定位 linux...

系統程式設計之執行緒

pthread t tid 建立執行緒號,多個執行緒可以用陣列來實現,如pthread t tid 3 函式原型 int pthread create pthread t tid,const pthread attr t restrict attr,void start rtn void void ...

系統程式設計之程序

一 程序相關概述 1 相關指令 ps aux 檢視所有程序 ps aux grep 程序 只會過濾出指定程序資訊 top 指令類似windows任務管理器 2 程序描述符 pid pid 0 稱為交換程序 程序排程 pid 1 init程序 系統初始化 二 c程式的儲存空間是如何分配的 從高位址到低...