LunarRoom

Linux文件操作函數

字数统计: 719阅读时长: 2 min
2020/04/11 Share

Linux文件操作函數

由於經常在Linux環境下編程的時候會遇到各種各樣的文件操作函數,所以專門寫篇博客來匯總一下這些函數。


open()

原型

1
2
3
4
	#include <sys/types.h>
#include <sys/stat.h>
#include fcntl.h>
int open(const char *path, int oflags, mode_t mode);

返回值自然是一個int類型的文件描述符。

第一個path不用講,相對路徑或絕對路徑

第二個表示:打開方式

  • O_RDONLY(只讀)
  • O_WRONLY(只寫)
  • O_RDWR(讀寫)

打開文件時這三個參數是必選的,此外還有一些可選參數

  • O_APPEND 每次寫都在最末尾加上

  • O_CREAT 如果指定文件不存在則創建一個

  • O_EXCL 如果要創建的文件已存在,則報錯返回

  • O_TRUNC 如果文件存在,并且以只写/读写方式打开,则清空文件全部内容

  • O_NOCTTY 如果路径名指向终端设备,不要把这个设备用作控制终端。

  • O_NONBLOCK 如果路径名指向 FIFO/块文件/字符文件,则把文件的打开和后继 I/O

    ​ 设置为非阻塞模式(nonblocking mode)

  • O_DSYNC 等待物理 I/O 结束后再 write。在不影响读取新写入的数据的前提下,不等待

    ​ 文件屬性的更新。

  • O_RSYNC read 等待所有写入同一区域的写操作完成后再进行。

  • O_SYNC 等待物理 I/O 结束后再 write,包括更新文件属性的 I/O

  • O_DIRECTORY 如果打開的文件是一個目錄,則打開失敗。

  • O_NOFOLLOW 如果打開的文件是一個符號鏈接,則打開失敗

一般在使用這些參數時通過”|”分割開來,只有所有的權限都通過了才返回0,否則返回-1.如:

1
2
3
4
if((fd=open("/dev/ttys0",O_RDWR | O_NOCTTY | O_NDELAY)<0)
{
perror("open");
}

第三個參數是權限符

S_IRWXU00700 权限,代表该文件所有者具有可读、可写及可执行的权限。
S_IRUSR 或S_IREAD,00400 权限,代表该文件所有者具有可读取的权限。
S_IWUSR 或S_IWRITE,00200 权限,代表该文件所有者具有可写入的权限。
S_IXUSR 或S_IEXEC,00100 权限,代表该文件所有者具有可执行的权限。
S_IRWXG 00070 权限,代表该文件用户组具有可读、可写及可执行的权限。
S_IRGRP 00040 权限,代表该文件用户组具有可读的权限。
S_IWGRP 00020 权限,代表该文件用户组具有可写入的权限。
S_IXGRP 00010 权限,代表该文件用户组具有可执行的权限。
S_IRWXO 00007 权限,代表其他用户具有可读、可写及可执行的权限。
S_IROTH 00004 权限,代表其他用户具有可读的权限
S_IWOTH 00002 权限,代表其他用户具有可写入的权限。
S_IXOTH 00001 权限,代表其他用户具有可执行的权限。

CATALOG
  1. 1. Linux文件操作函數
    1. 1.1. open()