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代表写入的字节数
这里连续读取的时候文件指针文件指针自动后移
注意一定要关闭文件
以下便是具体的实例:

#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<stdlib.h>
#include<stdio.h>
#include<unistd.h>
int main()
{
  int a=open("newfile",O_RDWR|O_CREAT,0664);
  if(a==-1)
  {
     perror("open newfile");
     exit(1);
  }
  int b=open("hsllo.c",O_RDWR);
  if(b==-1)
  {
     perror("open hsllo.c");
     exit(1);
  }
  char arr[2048]={0};
  int c=read(b,arr,sizeof(arr));
   if(c==-1)
  {
    perror("readfile");
    exit(1);
  }
  while(c)
  {
     int d=write(a,arr,c);
     if(d==-1)
     {
     perror("writefile");
      exit(1);
     }
    c=read(b,arr,sizeof(arr));
  }
  close(a);
  close(b);
   return 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设置拓展的长度
另一个是再在文件末尾写点数据进去才能拓展进去

发布了37 篇原创文章 · 获赞 52 · 访问量 1820

猜你喜欢

转载自blog.csdn.net/qq_45737068/article/details/104712502