Linux 系统编程 --- day3
目录
1. fileno
2.fdopen
3. 目录操作
3.1 opendir
3.2 readdir
3.3 closedir
3.4 实现 ls 命令的功能
4. chdir (相当于cd命令)
5. getcwd (相当于pwd命令)
6. mkdir
7. rmdir (相当于rm命令)
8. stat
9. 关于时间的函数
9.1 time
9.2 localtime
9.3 ctime
10. uid 和 gid
10.1 getpwuid
10.2 getgrgid
1. fileno
int fileno(FILE *stream);
功能 : 获得一个文件流指针中的文件描述符
参数:
stream : 文件流指针
返回值 : 成功返回文件描述符,失败返回-1
2.fdopen
FILE *fdopen(int fd, const char *mode);
功能 : 将文件描述符转化为文件流指针
参数:
fd : 已经打开的文件描述符
mode:(拿到文件为什么模式就传什么模式,不能改权限)
"r"
"r+"
"w"
"w+"
"a"
"a+"
返回值 : 成功返回文件流指针,失败返回NULL
注:这两个函数的关闭要拿封装度搞得关文件,任何一个关掉后,另一个就不能再用了。
3. 目录操作
一般流程:
1、打开目标目录
2、读取目录,,
3、关闭目录
3.1 opendir
DIR *opendir(const char *name);
功能:打开一个目录获得一个目录流指针
参数:
name :目录名
返回值:成功返回目录流指针,失败返回NULL
3.2 readdir
struct dirent *readdir(DIR *dirp);
功能:从目录流中读取文件信息并将保存信息的结构体
参数:
dirp:目录流指针
返回值:包含文件信息的结构体,出错或者读到目录流末尾返回NULL
3.3 closedir
int closedir(DIR *dirp);
功能:关闭之前已经打开的目录流对象
参数:opendir的返回结果中目录流对象
返回值:成功 0,失败 -1;
3.4 实现 ls 命令的功能
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <dirent.h>int main(int argc, char *argv[])
{DIR * dir = opendir("./"); // 打开当前目录if(NULL == dir){fprintf(stderr,"opendir errpr\n");return 1;}while(1){struct dirent * info = readdir(dir); // 读取目录中的文件if(NULL == info){break;}switch(info->d_type) // 判断文件类型{case DT_DIR:printf("目录文件 ");break;case DT_REG:printf("普通文件 ");break;case DT_UNKNOWN:printf("其他文件 ");break;default:printf("未知文件 ");}printf("%s\n",info->d_name);}closedir(dir);return 0;
}
4. chdir (相当于cd命令)
int chdir(const char *path);
功能 :改变当前程序的工作路径
参数:
path:改变到的路径
返回值:成功返回0,失败返回-1
#include <stdio.h>
#include <unistd.h>
int main(int argc, char *argv[])
{int ret = chdir("..");if(-1 == ret){fprintf(stderr,"chdir error\n");return 1;}return 0;
}
5. getcwd (相当于pwd命令)
char *getcwd(char *buf, size_t size);
功能:获得当前的工作路径
参数:
buf:保存工作路径空间的首地址
size:保存路径空间的长度(最大接收长度,如果没有这个buf可能越界)
返回值:成功返回包含路径空间的字符串首地址,失败返回NULL
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>int main(int argc, char *argv[])
{char buf[256]={0};getcwd(buf,sizeof(buf));printf("current path is %s\n",buf);chdir("../");getcwd(buf,sizeof(buf));printf("change path is %s\n",buf);return 0;
}
6. mkdir
int mkdir(const char *pathname, mode_t mode); // mode得写为0777
功能:创建一个目录
参数:
pathname:路径
mode:一般为0777,,
返回值:成功返回0,失败返回-1
#include <stdio.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>int main(int argc, char *argv[])
{int ret = mkdir("aaa",0777);if(-1 == ret){fprintf(stderr,"mkdir error\n");return 1;}return 0;
}
7. rmdir (相当于rm命令)
int rmdir(const char *pathname);
int rmdir(const char *pathname);
功能:删除一个空目录文件
参数:
pathname:目录文件的名字
返回值:成功返回0,失败返回-1
#include <stdio.h>
#include <unistd.h>
int main(int argc, char *argv[])
{int ret = rmdir("./aaa");if(-1 == ret){fprintf(stderr,"rmdir error\n");return 1;}return 0;
}
8. stat
int stat(const char *path, struct stat *buf);
功能:获得文件的属性
参数:
path :文件的路径
buf: 属性存放空间的首地址
返回值:成功返回0,失败返回-1
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>int main(int argc, char *argv[])
{struct stat st;char filename[]="./01ls.c";int ret= stat(filename,&st); if(-1 == ret){fprintf(stderr,"stat error\n");return 1;}printf("ino:%lu mode:%d link:%lu uid:%u gid:%u size:%lu time:%lu %s\n",st.st_ino,st.st_mode,st.st_nlink,st.st_uid,st.st_gid,st.st_size,st.st_mtime,filename);return 0;
}
9. 关于时间的函数
9.1 time
功能:获得1970年到现在的秒数
参数:
t:存放秒数的空间首地址
返回值:成功返回1970年到现在的秒数,失败返回-1
#include <time.h>
#include <stdio.h>
int main(int argc, char *argv[])
{time_t tm;time(&tm);printf("%ld\n",tm);return 0;
}
9.2 localtime
struct tm *localtime(const time_t *timep);
功能:将一个秒数转化成日历时间
参数:
timep:保存秒数空间的地址
返回值:成功返回保存日历时间结构体的指针,失败返回NULL
struct tm
{
int tm_sec; /* seconds */
int tm_min; /* minutes */
int tm_hour; /* hours */
int tm_mday; /* day of the month */
int tm_mon; /* month */
int tm_year; /* year */
int tm_wday; /* day of the week */
int tm_yday; /* day in the year */
int tm_isdst; /* daylight saving time */
};
#include <time.h>
#include <stdio.h>
int main(int argc, char *argv[])
{time_t tm;time(&tm);struct tm * t= localtime(&tm);printf("%d-%d-%d %d:%d:%d\n",t->tm_year+1900 ,t->tm_mon+1,t->tm_mday,t->tm_hour,t->tm_min,t->tm_sec);return 0;
}
9.3 ctime
char *ctime(const time_t *timep);
功能:将时间秒数转化成字符串
参数:
timep:保存时间空间的地址
返回值:成功返回获得时间字符串的首地址,失败返回NULL
#include <time.h>
#include <stdio.h>
int main(int argc, char *argv[])
{time_t tm;time(&tm);printf("%s\n",ctime(&tm));return 0;
}
10. uid 和 gid
10.1 getpwuid
struct passwd *getpwuid(uid_t uid);
功能:根据用户id到/etc/passwd文件下解析获得
结构体信息
参数:
uid:用户id
返回值:成功返回id对应用户的信息,失败返回NULL
#include <sys/types.h>
#include <pwd.h>
#include <stdio.h>int main(int argc, char *argv[])
{uid_t uid = 1000;struct passwd * pw = getpwuid(uid);if(NULL== pw){fprintf(stderr,"getpwuid error\n");return 1;}printf("name:%s gid:%d info:%s dir:%s shell:%s\n",pw->pw_name,pw->pw_gid,pw->pw_gecos,pw->pw_dir,pw->pw_shell);return 0;
}
10.2 getgrgid
struct group *getgrgid(gid_t gid);
功能:根据gid到/etc/group文件中解析组信息
参数:
gid:组id
返回值:成功返回组信息,失败返回NULL
#include <stdio.h>
#include <sys/types.h>
#include <grp.h>
int main(int argc, char *argv[])
{gid_t gid = 1000;struct group * gr = getgrgid(gid);if(NULL == gr){fprintf(stderr,"getgrgid\n");return 1;}printf("name:%s gid:%d ",gr->gr_name,gr->gr_gid);int i = 0 ;while(NULL!=gr->gr_mem[i]){printf("%s\n",gr->gr_mem[i]);i++;}return 0;
}
相关文章:
Linux 系统编程 --- day3
目录 1. fileno 2.fdopen 3. 目录操作 3.1 opendir 3.2 readdir 3.3 closedir 3.4 实现 ls 命令的功能 4. chdir (相当于cd命令) 5. getcwd (相当于pwd命令) 6. mkdir 7. rmdir (相当于rm命令&a…...
centos从home分区分配空间到根分区
在安装centos系统时如果采用默认自动分区,则会默认只给根分区分配50G空间,其余多余的会被分配到home分区,而作为家用服务器或仅个人使用的话,为了方便往往根分区会不够用而home分区几乎没使用。 先看下现在的磁盘结构和容量(xfs文…...
设计模式实战:即时通讯应用的设计与实现
系统功能需求 用户管理:支持用户注册、登录、注销、个人信息更新等功能。消息传递:支持即时消息发送、接收、存储和显示,支持文本、图片、语音等多种消息类型。在线状态管理:实时跟踪和显示用户的在线状态。消息通知:在消息到达时发送推送通知给用户。聊天记录管理:支持聊…...
白骑士的C#教学实战项目篇 4.3 Web开发
系列目录 上一篇:白骑士的C#教学实战项目篇 4.2 图形用户界面(GUI)应用 在这一部分,我们将从桌面应用程序扩展到 Web 开发。Web 开发是现代软件开发的重要领域,涵盖了从前端用户界面到后端服务器逻辑的完整堆栈。在这…...
【数据分析】(交互) 延迟互信息(熵、概率密度、高斯核、带宽估计)
文章目录 一、互信息基础二、延迟互信息2.1 交互延迟互信息三、时间序列互信息中的概率计算(高斯核密度估计)四、python 示例补充 1:熵熵的定义熵的性质熵的单位和对数底数熵的最大值高熵、低熵的分辨补充 2:概率密度 和 高斯核概率密度高斯核拓展3 :核密度函数带宽估计在…...
html转vue项目
HTML是一种用于构建网页的标记语言,而Vue是一种用于构建用户界面的JavaScript框架。在HTML中使用Vue可以提供更加灵活和动态的用户界面功能。本文将介绍如何将HTML代码转换为Vue,并提供具体的代码示例。 首先,我们需要在项目中引入Vue框架。…...
.NET系列 定时器
net一共4种定时器 System.Windows.Forms.Timer 类型 》》WinForm专用System.Windows.Threading.DispatcherTime类型》》WPF专用System.Threading.Timer类型》》》它使用 ThreadPool 线程来执行定时操作System.Timers.Timer类型 》》这种很老了。 它使用基于底层计时…...
【Golang】火焰图空白部分是什么?
起因 被同事灵魂拷问:图中这块空白是什么东西? 豆包回答说是数据采样不完整,特定函数或代码段未被调用之类的原因,感觉都不太合理。 之前看过一篇文章说:Heap Profiling的采样是无时无刻不在发生的,执行…...
Web框架 --- 解析Web请求 [FromBody] [FromQuery] [FromRoute] [FromHeader]
Web框架 --- 解析Web请求 [FromBody] [FromQuery] [FromRoute] [FromHeader] [FromBody][FromQuery][FromRoute] or [FromUri][FromHeader] [FromBody] FromBody 属性在使用 application/json 内容类型并在正文中传递 JSON 时使用通常情况下,FromBody 在一个操作中只…...
Messari 摘要报告:Covalent Network(CXT)2024 Q2 品牌重塑、AI模块化数据、亚太地区扩展、代币回购计划和网络增长
摘要 Covalent Network(CXT)在将质押从 Moonbeam 迁移到以太坊后,质押的 CQT 百分比恢复到了 20% 以上。 Covalent Network(CXT)在第二季度新增了五个网络运营商,使 BSP 集增长了 36%,提升了协…...
Open3D 计算点云的面状指数
目录 一、概述 1.1原理 1.2实现步骤 步骤 1:确定邻域点 步骤 2:计算协方差矩阵 步骤 3:特征值分解 步骤 4:计算面状指数 步骤 5:可视化与应用 1.3应用领域 二、代码实现 2.1关键函数 2.2完整代码 三、实现…...
python下麦克风设备选择和录音
import pyaudio import threading import wave import numpy as np def audio_f2i(data, width16):"""将浮点数音频数据转换为整数音频数据。"""data np.array(data)return np.int16(data * (2 ** (width - 1)))def audio_i2f(data, width16)…...
云和集群有什么区别?
我们常说的集群是针对于某项单独的功能或者说是某几个功能的集合体。 举个例子,比方有100台机器组成一个集群,这个集群里面50台机器装了hadoop,10台机器装了spark,剩下40台机器再装一个查询引擎presto。诸如此类,把多…...
无人机视角下的EasyCVR视频汇聚管理:构建全方位、智能化的AI视频监控网络
随着5G、AI、物联网(IoT)等技术的快速发展,万物互联的时代已经到来,视频技术作为信息传输和交互的重要手段,在多个领域展现出了巨大的应用潜力和价值。其中,EasyCVR视频汇聚平台与无人机结合的AI应用更是为…...
数字影像技术是如何改变我们看待世界的方式呢?
在当今的科技时代,数字影像技术正以惊人的速度改变着我们的生活和视觉体验。那么,什么是数字影像技术呢? 数字影像技术是指通过数字化手段对图像和视频进行获取、处理、存储、传输和展示的一系列技术。 它利用各种数字设备,如数…...
Chainlit实现启动页面选择不同的LLM启动器等设置界面
基本概念:启动选择器(Starters) 启动选择器(Starters) 是一种帮助用户开始与您的助手互动的建议。您可以为助手定义最多4个启动建议,并且可以为每个启动建议指定一个图标。 示例代码 (starters.py) impo…...
SQL - 增、改、删
插入 (insert into) 插入单行 insert into 表名 values ( 对应列的值,用,号间隔) //一般主键值用default,不可填null的不要填null insert into 表名 (需要提供值的列名) values (与之对应的提供的值) //其他的值只需mysql默认提供 insert into 表名 子查…...
怎么屏蔽电脑监控软件?企业管理者的智慧选择——精准定位,合理屏蔽,让监控软件成为助力而非障碍!
电脑监控软件在企业管理中扮演着日益重要的角色,它们能够提升工作效率、保障信息安全、预防内部风险。然而,过度或不当使用监控软件也可能引发员工隐私担忧,影响工作积极性和团队氛围。因此,作为企业管理者,如何精准定…...
Linux·权限与工具-make
1. Makefile/makefile工具 首先展示一下,makefile工具如何使用。我们先写一个C语言程序 然后我们建立一个Makefile/makefile文件,m大小写均可。我们在文件中写入这样两行 wq保存退出后,我们使用 make 命令 可以看到生成了可执行程序ÿ…...
C++的序列容器——数组
前言: 这篇文章我们就开始新的章节,我们之前说的C/C的缺陷那部分内容就结束了。在开始新的章之前我希望大家可以先对着题目思考一下,C的容器是什么?有什么作用?下面让我们开始新的内容: 目录 前言&#x…...
SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...
未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...
基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...
高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...
AI病理诊断七剑下天山,医疗未来触手可及
一、病理诊断困局:刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断",医生需通过显微镜观察组织切片,在细胞迷宫中捕捉癌变信号。某省病理质控报告显示,基层医院误诊率达12%-15%,专家会诊…...
【JVM】Java虚拟机(二)——垃圾回收
目录 一、如何判断对象可以回收 (一)引用计数法 (二)可达性分析算法 二、垃圾回收算法 (一)标记清除 (二)标记整理 (三)复制 (四ÿ…...
Python Einops库:深度学习中的张量操作革命
Einops(爱因斯坦操作库)就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库,用类似自然语言的表达式替代了晦涩的API调用,彻底改变了深度学习工程…...
