当前位置: 首页 > news >正文

linux:有关目录、链接文件的函数 Makefil、gdb的使用

目录函数

1.getpwuid

struct passwd *getpwuid(uid_t uid);
功能:
    根据用户id到/etc/passwd文件下解析获得
    结构体信息
参数:uid:用户id
返回值:
    成功返回id对应用户的信息
    失败返回NULL

passwd 结构体的定义通常如下所示

struct passwd {  char   *pw_name;       /* 用户名 */  char   *pw_passwd;     /* 加密后的密码(在很多系统上,这只是一个占位符)*/  uid_t   pw_uid;        /* 用户ID */  gid_t   pw_gid;        /* 用户组ID */  char   *pw_gecos;      /* 用户的真实姓名或注释字段 */  char   *pw_dir;        /* 用户的主目录 */  char   *pw_shell;      /* 用户登录时使用的shell */  
};

2.getgrgid

struct group *getgrgid(gid_t gid);
功能:根据gid到/etc/group文件中解析组信息
参数:gid:组id:w
返回值:
    成功返回组信息
    失败返回NULL
struct group 结构体包含了组的相关信息,定义如下:

struct group {  char   *gr_name;       /* 组名 */  char   *gr_passwd;     /* 组密码(在很多系统中可能是 '*' 或为空)*/  gid_t   gr_gid;        /* 组ID */  char  **gr_mem;        /* 组成员列表,以NULL结尾的字符指针数组 */  
};

2.链接文件:

file.txt -> hello.c  
    软链接文件、符号链接文件
    硬链接文件
软链接命令行:ln -s  123 softlink  (生成的softlink就是快捷方式)

1.symlink

int  symlink(const  char  *oldpath, const char *newpath);
功能:
    创建一个链接向oldpath文件的新符号链接文件
参数:
    oldpath:被链接向的文件的路径
    newpath:新符号链接文件
返回值:
    成功返回0
    失败返回-1

2.remove  (rm -fr) 

int remove(const char *pathname);
功能:
    删除一个文件
参数:
    pathname:删除文件的路径
返回值:
    成功返回0
    失败返回-1

3.rename (mv =rename)

int  rename(const  char  *oldpath,  const char *newpath);
功能:
    将一个老的路径名改为新的路径
参数:
    oldpath:老路径名
    newpath:新路径名
返回值:
    成功返回0
    失败返回-1

4.link (ln 1 2) 

int  link(const char *oldpath, const char *newpath);
功能:
    创建一个硬链接文件
参数:
    oldpath:要链接向的文件
    newpath:创建的新硬链接文件
返回值:
    成功返回0
    失败返回-1

5.truncate

truncate 函数是一个系统调用,用于改变一个已存在文件的大小。这个函数的原型定义在<unistd.h>头文件中,用于将文件的大小调整为指定的长度。如果文件之前的大小大于这个长度,则超出部分的内容会被丢弃;如果文件之前的大小小于这个长度,并且文件是以允许写入的模式打开的,那么文件的末尾会扩展到新的长度,但新增的部分不会进行初始化(即这部分内容是未定义的,可能包含随机数据)。

int truncate(const char *path, off_t length);

  • path 参数是一个指向以null结尾的字符串的指针,该字符串包含了要调整大小的文件的路径名。(文件要存在)
  • length 参数指定了文件新的大小(以字节为单位)。
  • 如果调用成功,truncate 返回0。
  • 如果出现错误,truncate 返回-1.

报错相关函数

1.perror

void perror(const char *s);-->strerror()  stderr 
功能:
    打印s字符串和errno对应的错误信息
参数:
    s:要打印在终端上的出错信息
返回值:
    缺省

使用范围:c库函数、系统调用函数。

     perror函数的工作原理是基于全局变量errno的值。errno是一个在错误发生时由系统调用或库函数设置的错误码,表示最近一次发生的错误。perror函数会读取errno的值,并将其转换为对应的错误描述字符串,然后将该字符串与参数s(如果非NULL)一起输出到stderr。

2.strerror

char *strerror(int errnum);
功能:
    打印errnum出错码对应的出错信息
参数:
    errnum:出错errno号
返回值:
    成功返回对应的错误信息
    ruturn 1;

3.error ===>>>exit();

void error(int status, int errnum, const char *format, ...);
功能:
    程序出错打印对应出错原因和用户输入字符串并退出
参数:
    status:程序退出的状态
     EXIT_FAILURE    1  
     EXIT_SUCCESS    0   
    errnum:错误码
    format:类似printf打印
返回值:缺省

c语言中常用的内置宏:
    __FILE__ 表示是那个文件(左 右2边都是2个下划线)
    __LINE__表示第几行
    __func__表示在那个函数
    __DATE__
    __TIME__

 

练习:3个报错函数的用法

#include <stdio.h>
#include <error.h>
#include <errno.h> //extern int errno
#include <string.h>int main(int argc, char *argv[])
{FILE* fp = fopen("aaa","r");    if(NULL == fp){//perror("fopen");//printf("%s\n",strerror(errno));error(1,errno,"fopen,file:%s fun:%s line:%d",__FILE__,__func__,__LINE__);printf("aaaa\n");  //使用error程序退出运行return 1;}return 0;
}

Makefile               

Makefile 编写    工程管理工具

vim 编辑器,

gcc 编译器 :查看语法错误,

gdb 调试器:查看逻辑错误 make
 

Makefile的三种用法

all:main.c add.c mul.cgcc main.c add.c mul.c -o allclean:rm all
all:main.c add.c mul.cgcc $^ -o $@           //$^:依赖   $@:目标(这里表示all)clean:rm all
SRC = main.c 
SRC += add.c
SRC += mul.c 
OBJ = all
#自定义的变量flag 
FALG = -g             //调试信息
LIB = -lm             //调用数字库
CC = gcc              //编译器
$(OBJ):$(SRC)$(CC) $(SRC) -o $(OBJ) $(FLAG) $(LIB)clean:rm $(OBJ)

gdb 调试器使用方法:

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Nature Medicine | 常规机器学习构建蛋白质组衰老时钟!对于数学基础不好的同学,好好思考一下这种研究模式如何借鉴?
  • 暨南大学2024年硕士研究生报考录取情况统计表
  • Java面试八股之简述消息队列P2P模型
  • 硬件面试经典 100 题(51~70 题)
  • Collection - LinkedList 源码解读
  • [Windows CMD] 查看网络连接状态 netstat -na | findstr “TCP“
  • 【投融界-注册安全分析报告】
  • 富格林:谨防虚假陷阱杜绝暗箱
  • Javascript反调试实现判断用户是否打开了浏览器控制台
  • 【一招解决】局域网内命令行无法通过代理进行依赖下载,适用于npm、pip、mvn、gradle等命令
  • EXTI外部中断之对射式红外传感器计次应用案例
  • 鱼眼相机去畸变和矫正
  • python绘制电路图
  • wordpress全局自适应网址导航整站打包源码,含主题和数据库
  • AIGC从入门到实战:基础理论【核心算法与模型】
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • codis proxy处理流程
  • Flannel解读
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • Mac转Windows的拯救指南
  • Objective-C 中关联引用的概念
  • python 装饰器(一)
  • Redis 懒删除(lazy free)简史
  • Redis 中的布隆过滤器
  • tweak 支持第三方库
  • vue数据传递--我有特殊的实现技巧
  • 记录一下第一次使用npm
  • 讲清楚之javascript作用域
  • 前端性能优化--懒加载和预加载
  • 主流的CSS水平和垂直居中技术大全
  • Nginx实现动静分离
  • ​​​​​​​GitLab 之 GitLab-Runner 安装,配置与问题汇总
  • ​1:1公有云能力整体输出,腾讯云“七剑”下云端
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • ​卜东波研究员:高观点下的少儿计算思维
  • #define 用法
  • #数学建模# 线性规划问题的Matlab求解
  • (附源码)c#+winform实现远程开机(广域网可用)
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (十二)python网络爬虫(理论+实战)——实战:使用BeautfulSoup解析baidu热搜新闻数据
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (一) storm的集群安装与配置
  • .\OBJ\test1.axf: Error: L6230W: Ignoring --entry command. Cannot find argumen 'Reset_Handler'
  • .mat 文件的加载与创建 矩阵变图像? ∈ Matlab 使用笔记
  • .NET 5.0正式发布,有什么功能特性(翻译)
  • .Net OpenCVSharp生成灰度图和二值图
  • .NET Standard 支持的 .NET Framework 和 .NET Core
  • .Net 基于.Net8开发的一个Asp.Net Core Webapi小型易用框架
  • .NET 应用启用与禁用自动生成绑定重定向 (bindingRedirect),解决不同版本 dll 的依赖问题
  • .NET6 开发一个检查某些状态持续多长时间的类
  • .NET中的十进制浮点类型,徐汇区网站设计
  • /usr/lib/mysql/plugin权限_给数据库增加密码策略遇到的权限问题
  • @NoArgsConstructor和@AllArgsConstructor,@Builder
  • @Value获取值和@ConfigurationProperties获取值用法及比较(springboot)