系統呼叫(系統呼叫是作業系統提供給使用者程式的一組「特殊」函式介面,使用者通過這組介面獲得作業系統提供的服務)中操作i/o的函式,都是針對檔案描述符的。
通過檔案描述符可以直接對相應檔案進行操作,如:open、close、write、read、ioctl
#define stdin_fileno 0 //標準輸入的檔案描述符
#define stdout_fifeno 1 //標準輸出的檔案描述符
#define stderr_fileno 2 //標準錯誤的檔案描述符
程式執行起來後這三個檔案描述符是預設開啟的
open:開啟檔案
#include
#include
#include
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
引數:pathname:檔案的路徑及檔名。
flags:open函式的行為標誌。
mode:檔案許可權(可讀、可寫、可執行)的設定。
返回值:
成功返回開啟的檔案描述符。
失敗返回-1,可以利用perror去檢視原因。
close :關閉檔案
#include
int close(int fd);
引數:fd是呼叫open開啟檔案返回的檔案描述符。
返回值:
成功返回0。
失敗返回-1,可以利用perror去檢視原因。
write:把指定數目的資料寫到檔案
#include
ssize_t write(int fd, const void *addr,
size_t count);
引數:fd:檔案描述符。
addr:資料首位址。
count:寫入資料的位元組個數。
返回值:
成功返回實際寫入資料的位元組個數。
失敗返回-1,可以利用perror去檢視原因。
read:把指定數目的資料讀到記憶體
#include
ssize_t read(int fd, void *addr, size_t count);
引數:fd:檔案描述符。
addr:記憶體首位址。
count:讀取的位元組個數。
返回值:
成功返回實際讀取到的位元組個數。
失敗返回-1,可以利用perror去檢視原因。
練習:
#include #include #include #include #include int main()
printf("fd = %d\n", fd);
close(fd);
return 0;
}
#include #include #include #include #include int main()
close(fd);
return 0;
}
#include int main()
#include #include #include #include #include int main()
printf("fd = %d\n",fd);
char str[10];
read(fd, str, 8);
str[8] = '\0';
printf("%s\n",str);
close(fd);
return 0;
}
#include #include #include #include #include int main()
char str[20];
write(fd,"111111111111",12);
lseek(fd,0,seek_set); //讀寫位置移動到檔案開頭,seek_cur當前位置,seek_end,末尾
read(fd, str,12);
str[12]='\0';
printf("%s\n",str);
return 0;
}
系統呼叫實現cp命令(檔案開啟讀寫關閉綜合應用):使用系統呼叫實現cp命令 Linux下系統呼叫訪問檔案
linux 的檔案操作有兩種方式 linux系統呼叫方式,這種方式依賴於linux系統 c語言的檔案操作,採用c語言的庫函式實現。以下是linux系統呼叫方式 1.建立檔案 intcreat const char filename,mode t mode filename 要建立的檔名,包含路徑,預...
LINUX下通過系統呼叫的檔案操作
相比較標準庫函式 fopen fread fwrite 的方式,系統呼叫的方式只能在類unix系統下使用,而且,使用系統呼叫是不帶緩衝機制的。完全緩衝 只有資料超過緩衝區大小時才進行真正的讀寫操作,比如fread,fwrite函式就是完全緩衝。正常情況下指定讀多少位元組就讀多少位元組 行緩衝 當資料...
linux下epoll系統呼叫實現I O復用
epoll系統呼叫 穿件核心事件表,返回指向被建立表的檔案描述符 作為其它epoll函式的第乙個引數 include int epoll create int size epoll ctl實現對核心事件表的操作 int epoll ctl int epfd,int op,int fd,struct ...