Linux软件编程-文件IO

文件IO:系统调用--->Linux内核提供的文件操作接口

一.函数接口

(1) int open(const char *pathname, int flags);
          int open(const char *pathname, int flags, mode_t mode);
功能:打开一个文件
参数:
        pathname:打开的文件名
        flags:打开方式
                O_RDONLY : 只读方式,文件必须存在
                O_WRONLY :只写方式
                O_RDWR:      读写方式

                O_CREAT:文件不存在时创建
               O_TRUNC:清空文件
               O_APPEND:追加
     int open(const char *pathname, int flags, mode_t mode);

      mode:文件被创建时,需要增加的读写执行权限(0664,0表示8进制,与掩码002相或)

    rwxrwxrwx
    111 111 111
rwx:当前用户对该文件读写执行权限(Linux)
rwx:同组用户对该文件的读写执行权限
rwx:其他用户对该文件的读写执行权限
umask:掩码   002   000 000 010
mode:权限
(mode & ~umask)
   110 110 100
 &111 111 101
   110 110 100
    rw- rw- r--

返回值:
      成功:文件描述符
      失败:-1

文件描述符:操作系统为已打开文件分配的标识符,是一个小的,非负的整形数据
                     代表了一个已打开的文件

             默认文件描述符范围:0-1023           分配原则:最小未被使用原则
            系统默认已打开的三个文件对应的文件描述符:

                                       标准io (FILE *)        文件io  (fd-->int)
            标准输入设备: stdin                                  0
            标准输出设备: stdout                                1
            标准出错设备: stderr                                2
    
 文件描述符泄露:打开的文件使用完时,未及时关闭
                                1.  使用完及时关闭
                                2.  修改文件描述上限
             "r"  ---->O_RDONLY 
             "r+" ---->O_RDWR
             "w" ---->O_WRONLY | O_CREAT |O_TRUNC, 0664
             "w+"--->O_RDWR | O_CREAT | O_TRUNC,  0664
             "a"  ---->O_WRONLY | O_CREAT | O_APPEND, 0664
             "a+" ---->O_RDWR | O_CREAT | O_APPEND, 0664        

(2)  int close(int fd);

        功能:关闭fd文件描述符所代表的文件

        返回值:成功:0        失败:-1

(3)ssize_t read(int fd, void *buf, size_t count);
功能:从文件中读取数据
参数:
         fd:要读的文件
         buf:存储读取到的数据的内存首地址
         count:尝试(期待)读到的字节数
返回值:
    成功:实际读到的字节数
     失败:-1
   文件末尾:0
 (4)ssize_t write(int fd, const void *buf, size_t count);
  功能:向文件中写入数据
  参数:
        fd : 要写入的文件
        buf:要写入的数据的首地址
        count:写入的字节数
返回值:
    成功:实际写入的字节数
    失败:-1

//文件的拷贝
#include<stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
 
int main(int argc, char const *argv[])
{
    if(argc < 3)
    {
        printf("Usage:./a.out <srcfile> <dstfile>\n");
        return -1;
    }
    int fdsrc = open(argv[1],O_RDWR);
    int fddst = open(argv[2],O_WRONLY | O_CREAT | O_TRUNC,0664);
    if(-1 == fdsrc || -1 == fddst)
    {
        printf("fail open\n");
        return -1;
    }
    while(1)
    {
        char buff[1024] = {0};
        ssize_t size = read(fdsrc,buff,1024);
        if(size <= 0)
        {
            break;
        }
        write(fddst,buff,size);
    }
    close(fdsrc);
    close(fddst);
    return 0;
}

文件偏移函数:
(5)off_t lseek(int fd, off_t offset, int whence);
功能:重新定位文件的读写位置
参数:
          fd:定位的文件
         offset:定位的偏移量
          whence:要偏移的位置 
返回值:
       成功:当前读写位置到文件开头的偏移量
       失败:-1

时间相关的函数:
time();     功能:获取1970-1-1 0:0:0到现在的秒数
ctime();将秒数转换成字符串时间
localtime();将秒数转换成日历时间

printf类函数:

       int printf(const char *format, ...);
       将格式化的字符串打印到终端
       int fprintf(FILE *stream, const char *format, ...);
       将格式化后的字符串写入到文件流指针所对用的文件里
       int dprintf(int fd, const char *format, ...);
        将格式化后的字符串写入到文件描述符所对用的文件里
       int sprintf(char *str, const char *format, ...);
       将格式化后的字符串写入到str所指向的内存空间

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值