系統呼叫:所有的作業系統都提供多種服務的入口點,程式由此向核心請求服務。這些可直接進入核心的入口點被稱為系統呼叫。
不同作業系統提供了自己的一套系統呼叫,所以系統呼叫無法實現跨平台使用。而且頻繁地系統呼叫,在使用者態和核心態之間切換,很耗費資源,效率不高。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程式的儲存空間是如何分配的 從高位址到低...