Linux系统编程——IO编程_linux io编程

函数功能:
  打开文件,文件不存在时则创建一个文件。
函数参数:
  pathname:被打开文件名,包括文件路径;
  flags:打开文件的行为标识,如只读、只写、读写等;具体参数选择标识及含义如下。
这里写图片描述
  注意:
    1)前三个取值参数不可使用“|”,但可以与后面几个取值参数进行“|”操作,进行选择相应功能;
    2)以读写方式打开只能用“O_RDWR”,不能用“O_REONLY|O_WRONLY”。
  mode:此参数只有在打开的文件不存时才有效,即是指定创建文件时的用户权限。
这里写图片描述
函数返回值:
  成功:打开文件描述符。
  失败:-1。

2.2close函数
函数原型:
  int close(int fd);
所需头文件:

#include<uniste.h>

函数功能:
  关闭已打开的文件。
函数参数:
  fd:文件描述符,open函数的返回值。
函数返回值:
  成功:0。
  失败:-1。

2.3read函数
函数原型:
  ssize_t read(int fd, void *addr, size_t count);
所需头文件:

#include<unistd.h>

函数功能:
  读取指定的数据到内存。
函数参数:
  fd:文件描述符。
  addr:内存首地址,存放读取返回数据。
  count:读取的字节数。
函数返回值:
  成功:实际读取字节数。
  失败:-1。

2.4write函数
函数原型:
  ssize_t write(int fd, const void *addr, size_t count);
所需头文件:

#include<unistd.h>

函数功能:
  向文件写入指定的数据。
函数参数:
  fd:文件描述符。
  addr:数据缓冲区首地址。
  count:待写数据字节数。
函数返回值:
  成功:实际写入的字节数。
  失败:-1。

2.5lseek函数
函数原型:
  off_t lseek(int fd,off_t offset,int whence)
所需头文件:

#include<unistd.h>
#include<sys/types.h>

函数功能:
  指定文件操作地址偏移量。
函数参数:
  fd:文件描述符。
  offset:偏移量,每一读写操作所需要移动的距离,单位是字节的数量,可正可负(向前移,向后移)。
  whence:当前位置基点,取值及含义如下。
这里写图片描述
函数返回值:
  成功:当前文件位置。
  失败:-1。

3.编程实例

3.1实例1
  利用IO函数读写文件。

#include <fcntl.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int main(void)
{
    char \*buf="Read and write test!";
    char buf_r[strlen(buf)+1];
    int fd,size,len;
    len = strlen(buf);
    buf_r[len] = '/0';
    //首先调用open 函数,并指定相应的权限
    if ((fd = open("io\_test0.txt", O_CREAT | O_TRUNC | O_RDWR,0666 ))<0)
    {
        perror("open:");
        exit(1);
    }
    else
        printf("open and create file:io\_test0.txt %d OK\n",fd);
    //调用write 函数,将buf 中的内容写入到打开的文件中
    if ((size = write( fd, buf, len)) < 0)
    {
        perror("write:");
        exit(1);
    }
    else
        printf("write:%s OK\n",buf);
    // 调用lseek 函数将文件指针移动到文件开始8个字节,并读出余下内容 
    lseek(fd, 8, SEEK_SET );
    if ((size = read( fd, buf_r, len-8))<0)
    {
        perror("read:");
        exit(1);
    }
    else
        printf("read form file:%s OK\n",buf_r);
    if ( close(fd) < 0 )
    {
        perror("close:");
        exit(1);
    }
    else
        printf("close io\_test0.txt OK\n");
    return 0;
}

Linux下运行结果:
这里写图片描述

3.2实例2
  利用IO函数实现Linux命令终端的复制(cp)命令。使用 open() 打开源文件,使用 read() 从文件读数据,使用 write() 向目标文件写数据。

#include <stdio.h> 
#include <sys/types.h> 
#include <sys/stat.h> 
#include <fcntl.h> 

int main(int argc, char *argv[])  
{  
    if((argc == 3) && (strcmp(argv[1], argv[2]) != 0))  
    {// 保证有 3 个参数,而且源文件和目的文件名字不能一样 

        int fd_src, fd_dest, ret;  

        //只读方式打开源文件 
        fd_src = open(argv[1], O_RDONLY);   
        if(fd_src < 0)  
        {  
            perror("open argv[1]");  
            return -1;  
        }  

        // 新建目的文件 
        fd_dest = open(argv[2], O_WRONLY|O_CREAT, 0755);  
        if(fd_dest < 0)  
        {  
            close(fd_src);  
            perror("open argv[2]");  
            return -1;  
        }     
        do  
        {  
            char buf[1024] = {0};  
            // 从源文件读取数据 
            ret = read(fd_src, buf, sizeof(buf));  

            // 把数据写到目的文件,注意最后一个参数,有多少写多少 
            write(fd_dest, buf, ret);  
        }while(ret > 0);  

        // 关闭已打开的文件 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值