Linux部分系统IO函数
1.系統IO函數:
(1)open函數:
1).首先其需要包含頭文件:
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
2).然后就是open的兩種參數
int open(const char *pathname,int flags);
int open(const char *pathname,int flags,mode_t mode);
open會返回文件描述符返回-1則操作失敗
文件描述符是在關閉文件時close(頭文件#include<unistd.h>)需要的參數
pathname:可以是文件路徑名或者文件名,是文件名是當前路徑下,路徑為絕對路徑
flags :是打開文件采用的操作
必選項:
O_RDONLY:只讀模式
O_WRONLY:只寫模式
O_RDWR:可讀可寫
還有一些參數可以和上邊三種一起作為flags
可選項:
O_APPEND表示追加,如果原文件有內容這次寫入會在文件最末尾
O_CREAT文件不存在就會創建該文件
O_EXCL:表示如果文件已經存在則出錯同時返回-1并修改errno的值
O_TRUNC:如果文件存在并且以只讀只寫的方式打開那么長度截斷為0(即刪除文件內容)
mode:是設置訪問權限的初始值但是不是最終權限需要與本地掩碼(輸入umask可獲得)取反再&操作
比如權限初始為777,掩碼為002,那么都轉換成二進制,777對應111111111,02對應000000010進行&操作再三個三個的轉換成最終權限
3)errno是全局變量
頭文件==#include<errno.h>==
當函數調用發生錯誤的時候將會被設置值如果函數不發生錯誤就無定義而且不會置0
當引用函數發生錯誤時可以用perror函數來將函數發生錯誤的原因輸出
函數定義為:void perror(const char *s)
其參數的目的是用戶做的標記,是用戶調用函數用來干什么的時候發生了錯誤比如
perror(“open file”)函數在打開文件的時候發生錯誤,如圖(本目錄下是沒有hsllo.c這個文件):
第二張圖就可以看出來perror的參數和其要發生錯誤的原因的關系
4)如何查看文件已經存在(這里hsllo.c已經存在):
主要看open里邊的第二個參數放的內容
(2)read和write函數:
這里他倆的頭文件都是==#include<unistd.h>==
read(文件描述符,存放讀取的數據,讀取數據的字節數);
write(文件描述符,寫入文件的數據,寫入數據的字節數);
這里的read會有一個返回值是文件描述符,如果是-1則讀取文件失敗
如果是0則文件讀取完畢
如果大于1則是讀取的字節數
write為-1那么代表寫入失敗
write大于等于0代表寫入的字節數
這里連續讀取的時候文件指針文件指針自動后移
注意一定要關閉文件
以下便是具體的實例:
(3)lseek函數
頭文件
#include<sys/types.h>
#include<unistd.h>
off_lseek(int fd,off_t offset,int whence)
lseekh函數會重新定位被打開文件的偏移量
offset是偏移量字節
根據offset和whence的組合來決定
whence的值:
SEEK_SET:從文件頭部開始偏移offset個字符
SEEK_CUR:從文件當前讀寫指針開始增加offset個字節的偏移量
SEEK_END:文件偏移量設置為文件大小加上偏移量字節
offset為正則向文件末尾移動,為負數則向文件頭部向后移動
返回值為-1失敗否則返回值為新的偏移量
其有三個作用:
1.獲取文件大小
2.移動文件指針
3.文件拓展
下面是測試文件長度和文件拓展:
要想擴展必須有兩個步驟一個是offset設置拓展的長度
另一個是再在文件末尾寫點數據進去才能拓展進去
總結
以上是生活随笔為你收集整理的Linux部分系统IO函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux下的gdb调试makefile
- 下一篇: linux下的shell编程