Webserver(1.8)操作函数

news2024/11/27 0:33:17

目录

  • 文件属性操作函数
    • access函数
    • chmod函数
    • chown函数
    • truncate函数
  • 目录操作函数
    • mkdir函数
    • rmdir函数
    • rename函数
    • chdir函数
    • *getcwd函数
  • 目录遍历函数
    • *opendir函数
    • *readdir函数
    • closedir函数
  • dup、dup2函数
    • dup
    • dup2
  • fcntl函数

文件属性操作函数

access函数

判断某个文件是否有某个权限,或者判断文件是否存在

#include <unistd.h>
#include <stdio.h>

int main(){

    int ret = access("a.txt",F_OK);
    if(ret==-1){
        perror("access");

    }
    printf("文件存在!!\n");

    return 0;
}

在这里插入图片描述

chmod函数

修改文件的权限

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

int main(){
    int ret=chmod("a.txt",0777);
    if(ret==-1){
        perror("chmod");
        return -1;
    }


    return 0;
}

在这里插入图片描述

修改权限之后,文件权限改变了

在这里插入图片描述

chown函数

改变文件所在组

truncate函数

缩减或者扩展文件的尺寸至指定的大小

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

int main(){
    int ret=truncate("a.txt",5);
    if(ret==-1){
        perror("truncate");
        return -1;
    }

    return 0;
}

a.txt大小扩展到20个字节
在这里插入图片描述
缩减到5个字节的话,会把后面超出部分直接删除

目录操作函数

mkdir函数

生成一个目录

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

int main(){
    int ret =mkdir("aaa",0777);
    if(ret==-1){
        perror("mkdir");
        return -1;
    }


    return 0;
}


在这里插入图片描述
在这里插入图片描述
最终的权限会与umask进行一个&,抹除部分权限

rmdir函数

删除一个目录,只能删除框目录,如果有内容的话,要先把内容删掉,然后再调用这个函数

rename函数

修改目录的名字

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

int main(){
    int ret =rename("aaa","bbb");
    if(ret==-1){
        perror("rename");
        return -1;
    }


    return 0;
}

aaa变成了bbb
在这里插入图片描述

chdir函数

修改进程的当前工作目录

*getcwd函数

获取当前的工作路径

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


int main(){
    //获取当前的工作目录
    char buf[128];
    getcwd(buf,sizeof(buf));
    printf("当前的工作目录是:%s\n",buf);

    //修改工作目录
    int ret=chdir("/home/nowcoder/Linux/lesson13");
    if(ret==-1){
        perror("chdir");
        return -1;
    }

    //创建一个新的文件
    int fd=open("chdir.txt",O_CREAT | O_RDWR,0664);
    if(fd==-1){
        perror("open");
        return -1;
    }

     //获取当前的工作目录
    char buf1[128];
    getcwd(buf1,sizeof(buf1));
    printf("当前的工作目录是:%s\n",buf1);


    return 0;
}

在这里插入图片描述
改变工作路径之后,创建文件在新的工作路径下
在这里插入图片描述

目录遍历函数

*opendir函数

*readdir函数

读取目录中的数据

closedir函数

关闭目录

#define _DEFAULT_SOURCE
#include<sys/stat.h>
#include<sys/types.h>
#include<stdio.h>
#include<unistd.h>
#include<fcntl.h>
#include<dirent.h>
#include<string.h>
#include <stdlib.h>
int getFileNum(const char * path);

//读取某个目录下所有普通文件的个数
int main(int argc, char * argv[]){

    if(argc<2){
        printf("%s path\n",argv[0]);
        return -1;
    }
    int num=getFileNum(argv[1]);
    printf("普通文件的个数为:%d\n",num);
    return 0;
}
//用于获取目录下所有普通文件的个数
int getFileNum(const char * path){
    //1.打开目录
    DIR * dir=opendir(path);
    if(dir==NULL){
        perror("opendir");
        exit(0);
    }

    struct dirent * ptr;
    //记录普通文件的个数
    int total=0;

    while((ptr=readdir(dir))!=NULL){
        //获取名称
        char * dname=ptr->d_name;
        
        //忽略掉.和..
        if(strcmp(dname,".")==0||strcmp(dname,"..")==0){
            continue;
        }
        //判断是否是普通文件
        if(ptr->d_type==DT_DIR){
            //目录,需要继续读取这个目录
            char newpath[256];
            sprintf(newpath,"%s/%s",path,dname);
            total+=getFileNum(newpath);
        }
        if(ptr->d_type==DT_REG){
            total++;
        }

    }
    //关闭目录
    closedir(dir);

    return total;
}

在这里插入图片描述

dup、dup2函数

dup

复制文件描述符,新的文件描述符和旧的指向同一个文件,多个文件描述符可以指向同一个文件

#define _DEFAULT_SOURCE
#include<sys/stat.h>
#include<sys/types.h>
#include<stdio.h>
#include<unistd.h>
#include<fcntl.h>
#include<dirent.h>
#include<string.h>
#include <stdlib.h>
#include<unistd.h>


int main(){
    int fd = open("a.txt",O_RDWR | O_CREAT,0664);
    int fd1=dup(fd);

    if(fd1==-1){
        perror("dup");
        return -1;
    }
    printf("fd :%d,fd1:%d\n",fd,fd1);

    close(fd);
    char * str="hello,world";
    int ret=write(fd1,str,strlen(str));
    if(ret==-1){
        perror("write");
        return -1;
    }
    close(fd1);


    return 0;
}

在这里插入图片描述
会从空闲中找一个最小的文件描述符用

dup2

重定向文件描述符

#define _DEFAULT_SOURCE
#include<sys/stat.h>
#include<sys/types.h>
#include<stdio.h>
#include<unistd.h>
#include<fcntl.h>
#include<dirent.h>
#include<string.h>
#include <stdlib.h>
#include<unistd.h>

int main(){
    int fd=open("1.txt",O_RDWR | O_CREAT,0664);
    if(fd==-1){
        perror("open");
        return -1;
    }
    int fd1=open("2.txt",O_RDWR | O_CREAT,0664);
    if(fd1==-1){
        perror("open");
        return -1;
    }
    printf("fd:%d,fd1:%d\n",fd,fd1);
    int fd2=dup2(fd,fd1);
    if(fd2==-1){
        perror("dup2");
        return -1;
    }
    //通过fd1去写数据,实际操作的是1.txt,而不是2.txt
    char * str ="Hello,dup2";
    int len=write(fd1,str,strlen(str));
    if(len==-1){
        perror("write");
        return -1;
    }
    printf("fd:%d,fd1:%d,fd2:%d\n",fd,fd1,fd2);

    close(fd);
    close(fd1);


    return 0;
}

在这里插入图片描述

fcntl函数

复制文件描述符
设置/获取文件的状态标志

#define _DEFAULT_SOURCE
#include<sys/stat.h>
#include<sys/types.h>
#include<stdio.h>
#include<unistd.h>
#include<fcntl.h>
#include<dirent.h>
#include<string.h>
#include <stdlib.h>
#include<unistd.h>

int main(){
    //复制文件描述符
    //int fd=open("1.txt",O_RDONLY);
    //int ret=fcntl(fd,F_DUPFD);

    //修改或者获取文件状态的flag
    int fd=open("1.txt",O_RDWR);
    if(fd==-1){
        perror("open");
        return -1;
    }
    //获取文件描述符状态FLAG
    int flag=fcntl(fd,F_GETFL);
    flag |=O_APPEND;
    //修改文件描述符状态的flag,给flag加入O_APPEND
    int ret=fcntl(fd,F_SETFL,flag);
    if(ret==-1){
        perror("fcntl");
        return -1;
    }

    char * str="nihao";
    write(fd,str,strlen(str));
    close(fd);

    return 0;
}

内容已经被追加到文件中
在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2228098.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

解决ElasticSearch启动成功却无法在浏览器访问问题

目录 前言&#xff1a; 问题复现 &#xff1a; 解决问题&#xff1a; 1、修改sysctl.conf文件 2、在sysctl.conf文件增加这段东西 3、 然后保存退出&#xff0c;输入以下命令使其生效 结语&#xff1a; 前言&#xff1a; 这篇文章是小白我今天突然启动es&#xff0c;发现e…

【tomcat系列漏洞利用】

Tomcat 服务器是一个开源的轻量级Web应用服务器&#xff0c;在中小型系统和并发量小的场合下被普遍使用。主要组件&#xff1a;服务器Server&#xff0c;服务Service&#xff0c;连接器Connector、容器Container。连接器Connector和容器Container是Tomcat的核心。一个Container…

如何在Linux系统中使用SSH Key认证进行无密码登录

如何在Linux系统中使用SSH Key认证进行无密码登录 SSH Key认证简介 安装SSH 在Debian/Ubuntu系统中检查 在CentOS/RHEL系统中检查 生成SSH密钥 复制公钥到远程服务器 配置SSH服务端 编辑SSH配置文件 重启SSH服务 测试无密码登录 SSH Key认证的高级配置 设置密钥的权限 限制密…

开发流程初学者指南——需求分析

目录 从零开始理解需求分析什么是需求分析&#xff1f;需求分析的目标需求分析的基本原则需求分析的各个阶段需求分析的常用方法和工具编写需求文档总结 从零开始理解需求分析 需求分析是软件开发过程中不可或缺的一环&#xff0c;它帮助我们明确用户的需求&#xff0c;确保最…

MySQL Workbench工作台汉化

一、下载汉化包 通过百度网盘分享的文件&#xff1a;MySQL汉化包.rar 链接&#xff1a;https://pan.baidu.com/s/1PaJSU9dvVnQQWEESHSue5Q 二、汉化过程 注意&#xff1a;替换之前一定要记得把两个文件复制出来存着&#xff0c;防止替换失败修改了文件 找到MySQL的工作台da…

AI数字人应用场景超全解析(下)

​​一、AI数字人技术发展趋势 1、技术迭代与创新 AI数字人技术的迅猛进步&#xff0c;得益于人工智能、计算机图形学、动作捕捉及3D建模等领域的突破性进展。深度学习算法的优化&#xff0c;让AI数字人的语言理解和生成能力愈发自然&#xff0c;能够提供更加精准和个性化的交…

实战-任意文件下载

实战-任意文件下载 1、开局 开局一个弱口令&#xff0c;正常来讲我们一般是弱口令或者sql&#xff0c;或者未授权 那么这次运气比较好&#xff0c;直接弱口令进去了 直接访问看看有没有功能点&#xff0c;正常做测试我们一定要先找功能点 发现一个文件上传点&#xff0c;不…

激光自动对焦显微系统的原理和作用

原理 激光自动对焦原理&#xff1a; &#xff08;1&#xff09;激光自动对焦显微系统利用激光束的自聚焦特性实现精确焦点控制。在检测过程中&#xff0c;激光束通过照明针孔形成点光源&#xff0c;对样品表面进行扫描。 &#xff08;2&#xff09;被照射的点在探测针孔处成像…

【数据集】全球30弧秒网格人为热通量数据(AHF)

【数据集】全球30弧秒网格人为热通量数据(AHF) 数据概述数据下载数据处理基于Python绘制研究区内人为热通量数据(AHF)基于Python插值获取2020年人为热通量数据参考人为热通量(anthropogenic heat flux)数据是指由人类活动引起的地表热量变化的定量数据。这些数据通常用于…

电子邮件防泄密系统怎么选?分享五款邮件加密工具,好不好用你说的算!(宝藏篇)

电子邮件防泄密系统怎么选&#xff1f; 根据国际IT安全公司的研究&#xff0c;有70%的企业在担心电子邮件可能泄密&#xff0c;约一半员工承认曾错误发送不当或机密邮件。 尽管许多企业已经意识到了"邮件危机"&#xff0c;但仍未找到有效解决方案。 邮件发送不受控…

由小流氓从线下转线上看软件需求的第一性原理

在我上初、高中的时候&#xff0c;我们这里的治安是很差的&#xff0c;人称“匪城”&#xff01;街面上游荡着大大小小的流氓、二流子&#xff01;时不时干上一架&#xff0c;欺负一下老实人或做小生意的&#xff0c;我们这里市民真是不堪其扰&#xff01;很多电视剧将这些流氓…

Oracle+11g+笔记(8)-备份与恢复机制

Oracle11g笔记(8)-备份与恢复机制 8、备份与恢复机制 8.1 备份与恢复的方法 数据库的备份是对数据库信息的一种操作系统备份。这些信息可能是数据库的物理结构文件&#xff0c;也可能是某一部分数 据。在数据库正常运行时&#xff0c;就应该考虑到数据库可能出现故障&#…

excel斜线表头

检验数据验证对象 鼠标放在检验数据 验证对象中间&#xff0c;altenter 之后空格 选中格子&#xff0c;右键单元格格式&#xff0c; 完成 如果是需要多分割&#xff0c;操作一样&#xff0c;在画斜线的时候会有区别&#xff0c;在插入里面用直线画斜线即可 在表格插入的时…

基于matlab的线性卷积演示系统

文章目录 前言1. 卷积的简单介绍1.1 翻褶1.2 移位1.3 相乘1.4相加1.5 整体的运行效果展示 2.App Designer的介绍3.具体的开发步骤3.1 声明成员变量3.2 设计基本布局3.3 编写回调函数 4.运行展示结语 前言 本篇文章按照如下要求&#xff0c;完成线性卷积演示系统 (1)用matlab完…

WPF+MVVM案例实战(九)- 霓虹灯字效果控件封装实现

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1、运行效果2、主菜单与界面实现1、主菜单2、霓虹灯字界面实现3、字体资源获取3、控件封装1.创建自定义控件2、依赖属性实现3、封装控件使用4、运行效果4、源代码获取1、运行效果 2、主菜单与界面实…

OpenCV视觉分析之目标跟踪(6)轻量级目标跟踪器类TrackerNano的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 Nano 跟踪器是一个超轻量级的基于深度神经网络&#xff08;DNN&#xff09;的通用目标跟踪器。 由于特殊的模型结构&#xff0c;Nano 跟踪器速度…

【AIGC】AI工作流workflow实践:构建日报

workflow实践 引言实现步骤分析实践创建 dify workflow 应用创建工作流内部节点1、设置输入字段2、创建两个LLM节点3、设置结束节点 运行工作流 结语 引言 工作流 workflow 是现在 LLM 很重要的一个概念&#xff0c;因为对于一个模型来说&#xff0c;非常复杂的问题很难一次性…

RISC0 Boundless:可验证计算层

1. 引言 区块链技术&#xff1a; 是解决双花问题的革命性解决方案&#xff0c;无需中介即可在数字交易中建立信任。 然而&#xff0c;区块链技术要求所有参与者重新执行所有数据以达成共识。虽然这种方法解决了关键问题&#xff0c;但也带来了可扩展性挑战&#xff0c;限制了…

移远通信闪耀2024香港秋灯展,以丰富的Matter产品及方案推动智能家居产业发展

10月27-30日&#xff0c;2024香港国际秋季灯饰展在香港会议展览中心盛大开展。 作为全球领先的物联网整体解决方案供应商&#xff0c;移远通信再次亮相&#xff0c;并重点展示了旗下支持Matter协议以及亚马逊ACK ( Alexa Connect Kit ) SDK for Matter方案的Wi-Fi模组、低功耗蓝…

C++ 二叉树进阶:相关习题解析

目录 1. 二叉树创建字符串。 2. 二叉树的分层遍历1 3. 二叉树的分层遍历2 4. 二叉树的最近公共祖先 5. 将二叉搜索树转换为排序的双向链表 6. 从前序与中序遍历序列构造二叉树 7. 从中序与后序遍历序列构造二叉树 8. 二叉树的前序遍历&#xff0c;非递归迭代实现 9.…