LinuxIO

与cIO对比

虚拟地址空间

用完即释放
分内核区,用户区

文字描述符

在进程内核区Linux kernel(PCB)
最大打开1024
多次打开描述符不一样


IO常规函数


查看
man 2

int open(const char*pathname,int flags};
# flags:  对文件操作权限和其他设置;O_RDONLY,O_WRONLY,o_RDWR互斥
# errno Linux中记录最近的错误序号,全局变量
void perror(const int *s):打印错误序列

int open(const char *pathname,int flags , mode_t mode)
# flags:  对文件操作权限和其他设置;O_RDONLY,O_WRONLY,o_RDWR互斥,可选O_CREATE
#mode 八进制的数

读入
ssize_t read(int fd,void *buf,size_t count);
buf存放地址
count指定数组大小

ssize_t write(int fd,void *buf,size_t count);
buf写入数据
count指定数组大小

其他函数

int fseek(FILE *stream,long offset, int whence);
off_lseek(int fd, off_t offset,int whence);
##offset偏移量

作用
lseek(fd,0,SEEK_SET) 移到指针到文件头
lseek(fd,0,SEEK_CUR) 当前位置
lseek(fd,0,SEEK_END) 获取长度
lseek(fd,100,SEEK_END) 拓展文件长度100字节

查看文件信息
stat cmd可用
int stat(const char *pathname,struct stat *statbuf);
输出软链接文件信息结构体
int lstat(const char *pathname,struct stat *statbuf);
输出硬链接文件信息结构体

硬链接和源文件是同一份文件而软连接是独立的文件,类似于快捷方式,存储着源文件的位置信息便于指向。
使用限制上,不能对目录创建硬链接,不能对不同文件系统创建硬链接,不能对不存在的文件创建硬链接;
可以对目录创建软连接,可以跨文件系统创建软连接,可以对不存在的文件创建软连接

文件属性相关

判断文件权限
int access(const char *pathname,int mode);
#mode R_OK,W_OK,X_OK(EXE),F_OK(是否存在)

修改权限
int chmod(const char *pathname,int mode);

修改所在组
int chown(const char *pathname,uid_t owner, git_t group);
vim /etc/password

修改文件大小
int truncate(const char *path,off_t length);

文件目录相关

09/目录操作函数
int mkdir(const char *pathname,mode_t mode) ;
#mode 八进制的数

int rmdir (const char *pathname) ;

int rename (const char *oldpath,const char *newpath);

修改进程工作目录
int chdir(const char *path) ;

获取当前工作目录,
char *getcwd (char *buf, size_t size) ;
#size大小
打开目录
DIR *opendir (const char *name);
#DIR型变量
读取目录中的数据
struct dirent *readdir(DIR *dirp);
  struct dirent{
      //此目录进入点的inodeino_t d_ino;
      //目录文件开头至此目录进入点的位移off_t d_off;
      l l d_name的长度,不包含NULL字符unsigned short int d_reclen;ll d_name所指的文件类型
      unsigned char d_type;//文件名
      char d_name [ 256];
  } ;
关闭目录
int closedir(DIR *dirp) ;

文件描述符相关

int dup (int oldfd);
复制文件描述符

int dup2 (int oldfd, int newfd) ;
重定向文件描述符
oldfd指向a.txt, newfd指向b.txt
调用函数成功后:
 newfd和 b.txt做close,newfd指向了a.txt

int fcntl (int fd, int cmd, ... /* arg * / );
复制文件描述符
int fcntl(int df,F_DUPFD)
设置/获取文件的状态标志
  指定
  int fcntl(int df,F_GETFL)
  #状态参考open里的flags

  设置
  int fcntl(int df,F_SETFL)
  必选项:O_RDONLY,O_WRONLY,O_RDWR不可以被修改
  可选:O_APPEND,O_NONBLOCK
  O_APPEND表示追加数据
  NONBLOK设置成非阻塞
  flag |= O_APPEND


posted @ 2022-03-04 17:35  InsiApple  阅读(53)  评论(0)    收藏  举报