自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(17)
  • 收藏
  • 关注

原创 打开二进制文件

只需要99元就可以投资自己,掌握Linux系统编程!主要传授《Linux C/C++程序设计》《Linux 系统编程》,主页有学习视频!//读取 txt 文本文件;//读取二进制文件;只需要99元就拥有全部课程和资料,让我们用技术改变自己,改变生活,改变世界!在 windows 系统下,打开一个流媒体文件,是二进制文件;视频可以百度搜索:韦凯峰Linux编程学堂。

2024-10-02 11:18:50 1269

原创 fgets函数应用分析

C 库函数 char *fgets(char *str, int n, FILE *stream) 从指定的流 stream 读取一行,并把它存储在 str 所指向的字符串内。当读取 (n-1) 个字符时,或者读取到换行符时,或者到达文件末尾时,它会停止,具体视情况而定。stream -- 这是指向 FILE 对象的指针,该 FILE 对象标识了要从中读取字符的流。str -- 这是指向一个字符数组的指针,该数组存储了要读取的字符串。下面的实例演示了 fgets() 函数的用法。

2024-10-02 11:11:23 248

原创 execv函数分析应用

不带 l 的exec函数:execv,execvp表示命令所需的参数以char *arg[]形式给出且arg最后一个元素必须;// OK, 第一个参数是程序名,函数会到系统的环境变量目录下,找到该程序来执行;// OK,第一个参数是 path,是程序所在的绝对路径;注意:这两个函数之间的关系,如同 execl() 与 execlp() 函数之间的关系;

2024-10-02 11:01:49 469

原创 execlp函数应用分析

execlp()函数属于exec()函数族(exec()族函数用一个新的进程映像替换当前进程映像)它是execve(2)函数的前端;此时,第一个参数直接指定了需要执行程序的名称,但是,这个 ls 程序必须是存放在系统的环境变量目录下;execlp()会从PATH 环境变量所指的目录中查找符合参数file的文件名,找到后便执行该文件,如果用常数0来表示一个空指针,则必须将它强制转换为一个字符指针,否则将它解释为整形参数,file --- 是需要加载程序的名称,使用该函数时,我们只需要设置程序的名称;

2024-10-02 10:28:55 387

原创 main函数参数 argc, argv分析应用

那么,我们知道 char* argv[] 是一个“数组指针”,每一个元素,存放一个指针,指向存放参数的地址;但是,我们有一个疑问,对应 ./out www 123 这样的数据,是否存在一个“连续的内存块”中呢?我们在测试的时候,为了测试的方便,直接输出 argv[] 地址后的 20 个字符,不考虑内存越界;argc --- 定义了执行程序时,携带的参数,其中,也把程序本身的程序名也算在一起;可以看到,第 5,9,13 这样的元素,存放了“字符串”结束符 0 值;而且,每一个参数之间,有“字符串”结束符;

2024-09-21 17:13:35 368 1

原创 申请内存alloca函数

但是,调用free()是否内存块的时候,就出现异常!因为,alloca()函数是在“栈”上申请内存块,不需要手动释放内存块。函数说明:该函数在程序的“栈”上申请 size 个字节的内存空间,如果申请成功,返回该内存块的首地址,否则,返回NULL。可以看到,调用alloca()能够正确申请内存块,函数的返回值是内存块的首地址,可以给内存块拷贝字符串。就是在程序的“栈”上申请内存块,得到的内存块不需要调用free()函数进行释放。只需要99元就拥有全部课程和资料,让我们用技术改变自己,改变生活,改变世界!

2024-09-21 17:11:59 304

原创 C语言判断文件存在

参数mode有几种情况组合,R_OK,W_OK,X_OK 和F_OK。由于access()只作权限的核查,并不理会文件形态或文件内容,因此,如果一目录表示为“可写入”,表示可以在该目录中建立新文件等操作,而非意味此目录可以被当做文件处理。附加说明 使用access()作用户认证方面的判断要特别小心,例如在access()后再做open()的空文件可能会造成系统安全上的问题。可以看到,通过 F_OK 来判断文件是否存在,如果存在,则返回 0,否则返回 -1;表头文件 #include

2024-09-21 17:09:03 855

原创 数组初始化

只需要99元就可以投资自己,掌握Linux系统编程!主要传授《Linux C/C++程序设计》《Linux 系统编程》,主页有学习视频!只需要99元就拥有全部课程和资料,让我们用技术改变自己,改变生活,改变世界!此时,是错误的,这样的操作,只能够给数组的第一个元素设置为 0xFF 值;在定义数组的时候,我们可以很方便地初始化数组的元素为 0 值;此时,buf2[] 中的所有元素都赋值为 0 值;视频可以百度搜索:韦凯峰Linux编程学堂。然后,其他元素设置为 0x00 值;

2024-09-21 17:07:48 381

原创 sscanf函数提取格式化数据

所以,自己推理 sscanf() 函数在操作 macAddr1[5] 元素的时候,编译器在为 macAddr1[5] 元素赋值的时候,修改到了 macAddr2[0] 元素;那么,自己推理,macAddr1[], macAddr2[] 元素定义在一起,而且容量小;就是把 macTmp 中的数据,按照 "%x" 格式提取到 macAddr1[] 中;最终,打印 buf[] 数组,可以看到影响了 buf[1], buf[2] 等元素;那么,macAddr2[0] 元素就接在 macAddr1[5] 元素之后;

2024-09-21 17:06:48 775

原创 C语言宏定义使用优化日志调试

最终,我们自己需要输出的信息 "User Login: user:%s, pwd:%s" 能够直接完整地输出;2 ##__VA_ARGS__ 变量,是系统提供的宏,直接把用户需要输出的 多个 变量进行数据输出;1 fmt 参数,直接和 "NOTICE ..." 字符串拼接起来,没有任何符号进行连接;只需要99元就拥有全部课程和资料,让我们用技术改变自己,改变生活,改变世界!该宏会输出当前调试信息所在的 行号,文件名,当前时间等信息;此时,使用 TNOTICE 宏进行数据的输出;

2024-09-21 17:02:23 376

原创 __FILE__宏优化调试日志

函数功能:The strrchr() function returns a pointer to the last occurrence of the character 【c】 in the string 【s】.函数返回一个指向最后一次出现在字符串s中的字符c的位置指针,如果c不在s中,返回NULL。PS:linux中提供了相应的函数:basename(s),用来获取不带路径的文件名。只需要99元就拥有全部课程和资料,让我们用技术改变自己,改变生活,改变世界!但是,会把绝对路径也输出,导致文件名很长;

2024-09-21 16:52:24 442

原创 宏连接符#-优化日志调试

只需要99元就可以投资自己,掌握Linux系统编程!主要传授《Linux C/C++程序设计》《Linux 系统编程》,主页有学习视频!其中,通过 NAME() 宏,使用“#”连接符,把 BR_NOOP 这样的宏名给连接成字符串;只需要99元就拥有全部课程和资料,让我们用技术改变自己,改变生活,改变世界!可以看到,cmd_name() 函数返回 CMD 命令码对应的字符串;可以看到,无论是变量名,宏名,以及函数名,都可以返回其字符串名称;我们就可以把 n 这个名称,转换成字符串;最终,返回该字符串;

2024-09-21 16:51:01 414

原创 宏连接符-#字符

只需要99元就可以投资自己,掌握Linux系统编程!主要传授《Linux C/C++程序设计》《Linux 系统编程》,主页有学习视频!只需要99元就拥有全部课程和资料,让我们用技术改变自己,改变生活,改变世界!可以定义一个宏,是 "#" 连接符,输出一个符号的字符串;视频可以百度搜索:韦凯峰Linux编程学堂。

2024-09-21 16:48:10 262

原创 C语言结构体批量定义

那么,对应这样的操作,很多在很多的重复性;我们需要考虑使用一个模块来定义,简化代码;2 使用宏,在程序编译的时候,就进行处理,替换到代码调用处;可以提高代码的运行效率;只需要99元就拥有全部课程和资料,让我们用技术改变自己,改变生活,改变世界!1 使用函数,此时,对应这样 2 行代码,代码量很少,而且,使用函数的话;可以看到,我们可以通过 FREE_P 宏,封装了对指针 p 的删除操作;当对一些模块进行初始化 或 删除的时候,对很多数据进行相同的操作;在函数调用的过程中,存在函数调用切换的开销,影响效率;

2024-09-21 16:46:43 479

原创 文件读取格式注意

使用 fread() 读取的时候,读取到 100 个字节,fread() 函数就返回 0,表示读取完;这是因为,我们在打开文件的时候,参数是 "r",是把文件作为一个“文本文件”来看待操作;那么,此时自己推理:可能是 fread() 碰到 \r\n 就认为文件结束了;只需要99元就拥有全部课程和资料,让我们用技术改变自己,改变生活,改变世界!那么,在调试的时候,总是发现读取文件不完整;在调试的是,发现,读取的到的数据,末尾总是 \r\n,就是一个回车换行符;但是,存放 KEY 的文件,是一个二进制文件;

2024-09-21 16:18:02 304

原创 线程释放资源

被创建的子线程也可以自己分离自己,子线程调用pthread_detach(pthread_self())就是分离自己,因为pthread_self()这个函数返回的就是自己本身的线程ID。注意,在这里,我认为进程运行后,本身,也是一个线程,主线程,主线程和主线程建立的线程共享进程资源。只有当你调用了pthread_join之后这些资源才会被释放。而默认的条件下,一个线程结束后,其对应的资源不会被释放,于是,如果在一个程序中,反复建立线程,而线程又默认的退出,则最终线程资源耗尽,进程将不再能建立新的线程。

2024-09-21 16:06:34 342

原创 __VA_ARGS__宏应用

在1999年版本的ISO C 标准中,宏可以象函数一样,定义时可以带有可变参数。GCC始终支持复杂的宏,它使用一种不同的语法从而可以使你可以给可变参数一个名字,如同其它参数一样。__VA_ARGS__ 是一个可变参数的宏,很少人知道这个宏,这个可变参数的宏是新的C99规范中新增的,在上面的例子中,编译器仍然会有问题(complain),因为宏展开后,里面的字符串后面会有个多余的逗号。如果你在宏调用时,确实提供了一些可变参数,GNU CPP也会工作正常,它会把这些可变参数放到逗号的后面。

2024-09-21 16:04:25 486

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除