close函数

close函数关闭一个已打开的文件。

#include <unistd.h>

int close(int fd);

返回值:成功返回0,出错返回-1并设置errno

参数fd是要关闭文件描述符。当一个进程终止时,内核对该进程所有尚未关闭的文件描述符调用close关闭,所以即使用户程序不调用close,在终止时内核也会自动关闭它打开的所有文件。

由open返回的文件描述符一定是该进程尚未使用的最小的描述符。

代码演示如下:

#include "./common/head.h"
 
/*功能:
 *创建文件1、文件2,关闭文件1,创建文件3,验证fd是否一直为最小的文件描述符。
*/
 
int main(int argc, char **argv)
{
    if(argc != 4){    //./a.out file1 file2 file3
        printf("usage: cmd file1 file2 file3\n");
        exit(1);
    }
 
    int fd1, fd2, fd3;
    fd1 = open(argv[1], O_RDWR | O_CREAT, 0777);  //文件权限不一定是077,还与掩码umask有关系
    if(fd1 < 0){
        perror("OPEN1");
        exit(1);
    }else{
        printf("fd1 = %d\n", fd1);    //3。由于0、1、2是stdin、stdout、stderr,所以从3开始
    }
    fd2 = open(argv[2], O_RDWR | O_CREAT, 0777);
    if(fd2 < 0){
        perror("OPEN2");
        exit(1);
    }else{
        printf("fd2 = %d\n", fd2);    //4
    }
    
    close(fd1);    //关闭文件1,此时fd=3被释放
 
    fd3 = open(argv[3], O_RDWR | O_CREAT, 0777);
    if(fd3 < 0){
        perror("OPEN3");
        exit(1);
    }
    printf("fd3 = %d\n", fd3);    //3
    
    close(fd2);
    close(fd3);
 
    return 0;
}

解析:

创建文件1,文件2 ,由于进程启动会首先打开0,1,2(分别对应stdin、stdout、stderr),所以fd1=3,fd2=4;

关闭文件1后,fd=3被释放出来,所以再创建文件3时,fd3被分配的是当前最小描述符,即刚刚被释放的fd1,所以fd=3。

 

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值