Webserver(1.8)操作函数

目录

  • 文件属性操作函数
    • 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.txtchar * 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);//修改或者获取文件状态的flagint fd=open("1.txt",O_RDWR);if(fd==-1){perror("open");return -1;}//获取文件描述符状态FLAGint flag=fcntl(fd,F_GETFL);flag |=O_APPEND;//修改文件描述符状态的flag,给flag加入O_APPENDint 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.mzph.cn/diannao/58668.shtml

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

相关文章

基础IO -- 标准错误输出stderr

目录 1&#xff09;为什么要有 fd 为 2 的 stderr 2&#xff09;使2和1重定向到一个文件中 这里我们谈一下以前只是了解过的stderr 通过两段代码&#xff0c;显然&#xff0c;我们可以知道两个FILE*都是指向显示器的 对于重定向&#xff0c;只有stdout才会将打印的数据重定向…

基于Multisim的四位抢答器设计与仿真

四位选手进行抢答比赛&#xff0c;用基本门电路及集成逻辑器件构成四人抢答器。选手编号分别为1&#xff0c;2&#xff0c;3&#xff0c;4号&#xff0c;用S1&#xff0c;S2&#xff0c;S3&#xff0c;S4四个按钮作为抢答按钮&#xff0c;S0按钮为总清零按钮。当四人中任何一个…

Python毕业设计选题:基于Django+Vue的物资配送管理系统的设计与实现

开发语言&#xff1a;Python框架&#xff1a;djangoPython版本&#xff1a;python3.7.7数据库&#xff1a;mysql 5.7数据库工具&#xff1a;Navicat11开发软件&#xff1a;PyCharm 系统展示 管理员登录界面 管理员功能界面 申领者管理 后勤处管理 物资信息管理 入库信息管理 …

网安秋招面试

《Java代码审计》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484219&idx1&sn73564e316a4c9794019f15dd6b3ba9f6&chksmc0e47a67f793f371e9f6a4fbc06e7929cb1480b7320fae34c32563307df3a28aca49d1a4addd&scene21#wechat_redirect 《Web安全》h…

springboot092安康旅游网站的设计与实现(论文+源码)_kaic

毕业设计&#xff08;论文&#xff09; 基于JSP的安康旅游网站的设计与实现 姓  名 学  号 院  系 专  业 指导老师 2021 年 月 教务处制 目 录 目 录 摘 要 Abstract 第一章 绪论 1.1 研究现状 1.2 设…

字符串逆序(c语言)

错误代码 #include<stdio.h>//字符串逆序 void reverse(char arr[], int n) {int j 0;//采用中间值法//访问数组中第一个元素和最后一个元素//交换他们的值&#xff0c;从而完成了字符串逆序//所以这个需要临时变量for (j 0; j < n / 2; j){char temp arr[j];arr[…

Fakelocation 步道乐跑(Root真机篇)

前言:需要 Fakelocation&#xff0c;真机Root,步道乐跑&#xff0c;Dia&#xff0c;MT管理器系统需求 Fakelocation | MT管理器 | Dia | 环境模块 任务一 真机Root&#xff08;德尔塔&#xff0c;过momo&#xff0c;刷环境模块&#xff09; 任务二 前往Dia查看包名&#xff08…

【实战篇】requests库 - 有道云翻译爬虫 【附:代理IP的使用】

目录 〇、引言一、目标二、请求参数分析三、响应分析四、编写爬虫脚本【隧道代理的使用】 〇、引言 无论是学习工作、旅游出行、跨境电商、日常交流以及一些专业领域都离不开翻译工具的支持。本文就带大家通过爬虫的方式开发一款属于自己的翻译工具~ 一、目标 如下的翻译接口…

MyBatis 源码分析 - SQL执行过程(三)之 ResultSetHandler

MyBatis的SQL执行过程 在前面一系列的文档中&#xff0c;我已经分析了 MyBatis 的基础支持层以及整个的初始化过程&#xff0c;此时 MyBatis 已经处于就绪状态了&#xff0c;等待使用者发号施令了 那么接下来我们来看看它执行SQL的整个过程&#xff0c;该过程比较复杂&#xff…

达梦数据迁移工具DTS使用实践

1、环境描述 2、DTS概述 1.支持视图、存储过程/函数、包、类、同义词、触发器等对象迁移&#xff1b; 2.支持数据类型的自动映射&#xff0c;编码转换&#xff1b; 3.支持根据条件自定义迁移部分数据&#xff1b; 4.向导式迁移步骤&#xff0c;上手简单&#xff1b; 5.支持 we…

【Web.路由】——路由约束

我们需要明确的一点就是&#xff0c;一个URL地址就是一个路由值。 而路由约束&#xff0c;就是制定出的一套规则&#xff0c;只有路由值与路由约束中的规则匹配&#xff0c;才可以进行下一步操作。 路由约束不仅可用于路由请求&#xff0c;还可以用于链接的生成。 参数值约束 …

c++编解码封装

多态版编解码 对服务器和客户端的结构体进行序列化然后对数据进行反序列化 案例分析 代码demo Codec.h #pragma once #include <iostream>class Codec { public:Codec();virtual std::string encodeMsg();//string是标准库的string类virtual void* decodeMsg();virtu…

Android 圆形进度条CircleProgressView 基础版

一个最基础的自定义View 圆形进度条&#xff0c;可设置背景色、进度条颜色&#xff08;渐变色&#xff09;下载进度控制&#xff1b;可二次定制度高&#xff1b; 核心代码&#xff1a; Overrideprotected void onDraw(NonNull Canvas canvas) {super.onDraw(canvas);int mW g…

SSH登录介绍

说明&#xff1a;一般登录服务器&#xff0c;我们可以用远程连接工具&#xff0c;如XShell、Windterm等&#xff0c;或者通过公司搭建的JumpServer&#xff08;跳板机、堡垒机&#xff09;来连接。前者是点对点登录&#xff0c;输入主机、端口&#xff0c;通过SSH协议登录&…

ValueError: Object arrays cannot be loaded when allow_pickle=False

文章目录 问题解决方法1&#xff1a;allow_pickleTrue解决方法2&#xff1a;降低numpy版本错误原因&#xff1a;python和numpy版本不兼容 问题 Traceback (most recent call last): File “D:\project\test_st\retrieval\read_npy.py”, line 4, in data np.load(‘mosi0__le…

如何使用 Python 批量检测和转换 JSONL 文件编码为 UTF-8

如何使用 Python 批量检测和转换 JSONL 文件编码为 UTF-8 在日常开发中&#xff0c;我们经常会遇到不同编码格式的文件&#xff0c;比如 UTF-8、ASCII、Windows-1252、ISO-8859-1 等。文件编码不一致可能导致读取或处理文件时出现乱码&#xff0c;特别是在批量处理数据文件时。…

【三十八】【QT开发应用】vlcplayer视频播放器(一)实现视频播放,视频暂停,视频停止,进度条调节,音量调节,时长显示功能

效果展示 vlcplayer_test视频播放器 MainWidget.ui 注意控件的布局和命名&#xff0c;控件的命名和信号与槽函数的绑定有关&#xff0c;所以这点很重要。 下载VLC组件和环境配置 videolan下载地址我下载的是vlc-3.0.8-win64版本. 将下载的文件复制粘贴到项目文件中. 复制粘…

【LeetCode每日一题】——1791.找出星型图的中心节点

文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【题目提示】七【解题思路】八【时空频度】九【代码实现】十【提交结果】 一【题目类别】 图 二【题目难度】 简单 三【题目编号】 1791.找出星型图的中心节点 四【题目描述】 有一个…

深入了解 美国高防 CN2 :如何提升全球化业务的网络安全与性能

美国高防 CN2 的重要性 在跨国企业和全球化业务的不断扩展下&#xff0c;对高性能和安全的网络连接需求不断增加。美国高防 CN2&#xff08;Global Internet Access&#xff09;以其卓越的跨境传输效率和强大的防护能力&#xff0c;成为许多企业关注的焦点。尤其是对电商、游戏…

Endnote如何关联Word,在Word上通过Endnote插入文献

1、Word版本已被激活 首先检查Word版本是否已经被激活&#xff0c;不管是正版还是破解版&#xff0c;未激活状态&#xff08;试用&#xff09;可能会导致关联不成功。如下图所示为已激活版本&#xff0c;在“文件”—“账户”可看。 2、勾选开发工具 其次&#xff0c;打开Wor…