首页 > 系统相关 >linux:有关目录、链接文件的函数 Makefil、gdb的使用

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

时间:2024-08-16 09:26:07浏览次数:9  
标签:__ 文件 const int Makefil char gdb linux 链接

目录函数

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.c
	gcc main.c add.c mul.c -o all

clean:
	rm all
all:main.c add.c mul.c
	gcc $^ -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 调试器使用方法:

标签:__,文件,const,int,Makefil,char,gdb,linux,链接
From: https://blog.csdn.net/T66656/article/details/141215042

相关文章

  • Linux:开发工具(1)
    一、软件包管理器yum1.1Linux下安装软件的方式1、源代码安装(直接给你源码,你去进行编译——对用户要求太高!)    但是这样的话,就不光是源码,还需要把别人的一些相关编译环境配置也得搞过来,比如说我这个代码是用C语言写的,那么我们就需要C语言相关的编译器和库。对使用......
  • Linux打包命令tar极简示例_2
    只解压tar包中的某个文件这是tar包:只解压a.txt:上边的例子不大理想,再来一个tar包里带目录的:再弄个gzip压缩过的吧:......
  • 在Windows下启用Hyper-V以及安装Linux子系统
    文章目录一、启用Hyper-V二、安装Linux子系统三、开启Linux子系统适用于Linux的Windows子系统(WSL)是Windows的一项功能,可用于在Windows计算机上运行Linux环境,而无需单独的虚拟机或双引导。WSL旨在为希望同时使用Windows和Linux的开发人员提供无缝......
  • 详解Linux命令--ssh
    ssh命令是Linux中最常用的命令之一,用于通过安全的Shell协议远程登录和管理其他计算机。本文将详细介绍ssh命令的用法,并给出具体的示例。1.基本语法ssh的基本语法如下:ssh[options][user@]hostname[command][options]:可选参数,用于控制SSH会话行为。[user@]hostname:......
  • 详解Linux命令--目录
    Linux是一个功能强大的操作系统,适用于从个人计算机到超级计算机的多种平台。对于初学者来说,掌握基本的命令行操作是必不可少的技能之一。本文列举常用命令,并给出最最基础的使用示例,并附上详细介绍的连接。文件和目录管理1.cd(ChangeDirectory)用途:改变当前工作目录。......
  • Kali 2024 逆向调试 GDB 13.2 安装插件 Peda 不兼容报错解决方案
    发现问题如果你尝试直接进行$aptinstallgdb安装后应该是最新版的gdb13.2。并且尝试安装peda后将会出现fromsix.movesimportrange报错2024版的kali的python3是python3.11版本,而peda中的six库支持的是3.11之前的。而gdb13是支持python3.12的。有趣的一点是,当我们......
  • Linux--内核驱动框架(以字符设备驱动为例)
    下面将介绍一个简单的Linux内核驱动程序(部分),用于处理一个假设的字符设备(鼠标、键盘、串口、LED...),具体介绍如下:1头文件导入#include<linux/fs.h>//用于声明file_operations结构体和其他文件系统相关函数。#include<linux/module.h>//用于声明module_i......
  • 北京某大厂Linux系统管理和Shell脚本笔试题
    1.写一个sed命令,修改/tmp/input.txt文件的内容,要求:(1)删除所有空行;(2)在非空行前面加一个"AAA",在行尾加一个"BBB",即将内容为11111的一行改为:AAA11111BBB#创建一个测试文件[root@node1~]#echo-e"Hello\nWorld\nThisisatest\n\nAnotherline\n\nLastline">/tmp/in......
  • Linux驱动入门实验班——SR04超声波模块驱动(附百问网视频链接)
    目录一、工作原理1.触发信号2.回响信号二、接口图​三、编写思路1.构造file_operations结构体2.实现函数,填充结构体3.编写入口函数4.编写中断处理函数5.编写定时器超时函数6.编写出口函数7.声明入口、出口函数以及协议 四、应用程序五、注意事项:六、源码驱动......
  • Linux vmstat命令基本使用
    目录vmstat命令介绍vmstat各个参数的含义procsmemoryswapiosystemcpuvmstat命令使用实例虚拟内存相关知识总结通过vmstat来识别CPU瓶颈:解决CPU瓶颈的办法如下:通过vmstat识别CPU满负荷:通过vmstat识别内存瓶颈:解决内存瓶颈的办法如下:vmstat命令介绍vmstat主要是用来检测虚拟内存的......