![](https://img-blog.csdnimg.cn/20190918140012416.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Linux C
文章平均质量分 58
C语言
半砖
这个作者很懒,什么都没留下…
展开
-
select函数出现No such file or directory错误
项目中,实际使用的是特定的设备节点,当 select 函数的最后一个参数 tv_usec 设置超过1s时,就会出现 No such file or directory 错误。但是使用标准输入测试时,不会出现该问题,并且 select 的超时也是准确的,故该问题应该是由于操作的设备节点内部处理出现了问题。在嵌入式开发中,调用 select 函数出现。原创 2023-10-19 15:07:52 · 503 阅读 · 0 评论 -
TCP Connect 函数超时的问题
TCP 客户端通过 connect 函数连接服务器时,若服务器此时不在线或者当前网络不正常,会在 connect 函数中阻塞(默认情况下系统使用阻塞式 socket),直到超时时间,而这个超时时间是由内核规定的,这会导致连接时间较长,此时若是客户端还需要完成其他活动,则会影响正常业务。此时,我们可以通过将链路设置成非阻塞模式,并通过 select 函数设置超时时长,在超时时间内轮询套接字是否有可写权限,若有可写权限则进一步通过 getsocket 函数确认是否连接上服务器(因为有可写权限不仅是连接上服务器这原创 2022-06-15 14:01:57 · 5550 阅读 · 0 评论 -
setsockopt的常用选项
一、函数原型#include <sys/types.h >#include <sys/socket.h>int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t optlen);int getsockopt(int sockfd, int level, int ...转载 2019-08-08 09:49:32 · 714 阅读 · 0 评论 -
Linux网络编程之recv函数
返回值为-1,并且 (errno == EINTR || errno == EWOULDBLOCK || errno == EAGAIN) 的情况下认为连接是正常的,继续接收。原创 2023-05-26 09:51:51 · 2359 阅读 · 0 评论 -
I/O复用的理解
I/O 复用就是单个线程通过记录跟踪每一个 Sock(I/O流)的状态来同时管理多个 I/O 流。假设你是一个机场的空管,你需要管理到你机场的所有的航线,包括进港,出港,有些航班需要放到停机坪等待,有些航班需要去登机口接乘客。你会怎么做?最简单的做法,就是你去招一大批空管员,然后每人盯一架飞机,从进港,接客,排位,出港,航线监控,直至交接给下一个空港,全程监控。那么问题就来了:很快你就发现空管塔里面聚集起来一大票的空管员,交通稍微繁忙一点,新的空管员就已经挤不进来了。空管员之间需要协调,屋子里转载 2022-04-13 11:10:54 · 1201 阅读 · 0 评论 -
Linux多线程编程pthread_create传参的问题
但是我们传入值时,此时编译会出现报警,提示:从指针强制转换为不同大小的整数,这是由于void * 和 int 类型的长度是不一致的,我们可以通过打印 sizeof(void *) 和 sizeof(int) 来验证。所以在传参时可以传入静态变量的地址或动态分配的内存地址,这样就可以避免值异常和不同长度的类型之间的转换。从上述结果来看,执行结果并没有出现异常,但是在项目中,当传入线程的参数为局部变量的地址时,由于函数结束后会回收该地址,如果又重新分配给其他变量使用,这时候就会出现值异常。原创 2023-05-24 20:09:35 · 1289 阅读 · 0 评论 -
将指针强制转换为 `unsigned long long` 类型的使用方法
类型或其他整型的使用方法。原创 2023-04-20 19:26:16 · 897 阅读 · 0 评论 -
结构体内定义函数指针的问题
正确的做法是:在结构体内部定义如上特征的函数指针时,该函数指针成员需要直接使用 struct xxx 作为参数类型。另外,若其他地方还需要使用函数指针,可以在结构体定义的下方再给函数指针取别名。定义一个结构体,结构体内成员含有函数指针,函数指针的参数中包括了该结构体。原创 2023-04-19 15:06:12 · 150 阅读 · 0 评论 -
Linux网络接口操作之ioctl-1_接口参数
第一个参数fd指定一个由open(2)/socket(2)创建的文件描述符;第二个参数request指定操作的类型,即对该文件描述符执行何种操作;第三个参数为一块内存区域,通常依赖于request指定的操作类型。内核版本2.6.32.5ioctl(2)使用structifreq与/或structifconf结构执行网络接口相关的操作,这两个结构的地址作为ioctl(2)的第三个参数。union{};union{...转载 2022-07-25 19:01:22 · 2742 阅读 · 0 评论 -
编译strptime函数时,出现隐式声明报警的解决方法
编译的时候出现错误:warning: implicit declaration of function ‘strptime’; did you mean ‘strftime’? [-Wimplicit-function-declaration]看如下定义,有一个宏开关,解决办法:编译的时候加上 -D _XOPEN_SOURCE#define _XOPEN_SOURCE /* See feature_test_macros(7) */#include <time.h>/* 把指定时间s原创 2021-09-28 10:12:35 · 1972 阅读 · 0 评论 -
C 语言添加打印信息
1、通过两个 printf 函数#define PRINT_INFO (printf("[%s][%d]Info: ", __FILE__, __LINE__), printf)#define PRINT_WARRING (printf("[%s][%d]Warring: ", __FILE__, __LINE__), printf)#define PRINT_ERROR (printf("[%s][%d]Error: ", __FILE__, __LINE__), printf)#define P原创 2020-10-15 16:31:38 · 894 阅读 · 0 评论 -
Linux下C语言获取文件行数
快速获取文件的行数,不能用不断的读文本的方式,否则内存消耗和时间消耗都无法容忍。解决方案是调用 Linux 的 wc 命令。 获取行数用的是 -l , 其实可以获取总的字节数 -c ,最大行的长度-L, 这些随后可以替换。#include <stdio.h> #include <string.h>int cover(char *str){ int index = strchr((const char*)str, ' ') - str; str[index]原创 2020-10-15 16:29:43 · 2352 阅读 · 0 评论 -
C 语言字符串函数详解
void *memset(void *dest, int c, size_t count);将dest前面count个字符置为字符c.返回dest的值.void *memmove(void *dest, const void *src, size_t count);从src复制count字节的字符到dest. 如果src和dest出现重叠, 函数会自动处理.返回dest的值.void *memcpy(void *dest, const void *src, size_t count)..原创 2020-10-15 16:25:57 · 186 阅读 · 0 评论 -
C 语言使用库函数解析命令行参数
1 简介在编写需要命令行参数的 C 程序的时候,往往我们需要先解析命令行参数,然后根据这些参数来启动我们的程序。C 的库函数中提供了两个函数可以用来帮助我们解析命令行参数:getopt、getopt_long。getopt 可以解析短参数,所谓短参数就是指选项前只有一个“-”(如-t),而 getopt_long 则支持短参数跟长参数(如"–prefix")。2 函数介绍1、getopt函数函数定义:#include<unistd.h>int getopt(int argc,ch原创 2020-10-15 16:21:31 · 1629 阅读 · 0 评论 -
C 语言常用时间函数
1 时间类型Calendar Time 日历时间从一个标准时间(1900年1月1日0点)到此时经过的秒数。UTC/GMTUTC(Coordinated Universal Time)世界标准时间,即 GMT(Greenwich Mean Time)格林威治标准时间。2 时间相关函数time(取得目前的时间)头文件#include <time.h>定义函数time_t time(time_t *t);函数说明此函数会返回从公元1970年1月1日的UTC时间从0时原创 2020-10-15 16:09:47 · 4096 阅读 · 1 评论 -
Linux C语言封装库
我们通常把一些公用函数制作成函数库,供其它程序使用。函数库分为静态库和动态库两种。静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库。动态库在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入,因此在程序运行时还需要动态库存在。本文主要通过举例来说明在Linux中如何创建静态库和动态库,以及使用它们。第1步:编辑得到举例的程序–hello.h、hello.c和...转载 2019-07-09 10:14:44 · 4143 阅读 · 1 评论 -
windows下基于Eclipse搭建c/c++开发环境
1、Eclipse安装C/C++插件:注意:若下载的Eclipse是为C/C++开发者专门定制的版本,则已经预装了C/C++开发所需的插件。不需要再安装插件,该版本下载地址:https://www.eclipse.org/downloads/packages/ ,选择Eclipse IDE for C/C++ Developers进行下载。如果已经安装过Eclipse,但不是C/C++版本,那...原创 2019-06-12 17:11:48 · 4192 阅读 · 1 评论 -
C语言环境变量相关函数
原文链接:https://blog.csdn.net/napoleonwxu/article/details/46711885getenv()声明:char *getenv( const char * name );头文件:#include <stdlib.h>功能: 获取名为 name 的环境变量的值返回值: 如果成功,返回该环境变量值字符串的首地址,否则返回NULL...转载 2019-08-12 16:00:32 · 389 阅读 · 0 评论 -
C语言程序注释风格
良好编程习惯的养成对于一个程序员的发展非常重要,而注释对于一份程序来讲又是一个必不可少的组成部分,今天来研究一下C语言程序的注释风格。注释是源码程序中非常重要的一部分,一般情况下,源程序有效注释量必须在15%以上。注释的原则是有助于对程序的阅读理解,所以注释语言必须准确、易懂、简洁,注释不宜太多也不能太少,注释的内容要清楚、明了、含义准确,防止注释二义性,该加的地方一定要加,但不必要的地方一定...转载 2019-08-17 13:49:10 · 984 阅读 · 0 评论 -
利用目录函数(opendir,readdir,closedir)查找文件个数
一、简介如何知道一个目录下的所有文件个数呢?Linux系统io函数为我们提供了目录操作函数。我们可以利用它来递归的读取目录,从而知道指定目录下有多少个文件。二、函数接口1、opendir函数函数原型:DIR *opendir(const char *name);依赖头文件:#include <sys/types.h>#include <dirent.h>...转载 2019-09-16 14:50:29 · 1266 阅读 · 0 评论 -
Linux下C调用静态库和动态库
本文主要介绍Linux下C调用静态库和动态库1. 概念动态库和静态库二者的不同点在于代码被载入的时刻不同。静态库的代码在编译过程中已经被载入可执行程序,因此体积比较大。动态库(共享库)的代码在可执行程序运行时才载入内存,在编译过程中仅简单的引用,因此代码体积比较小。静态情况下,把库直接加载到程序中。而动态库链接的时候,它只是保留接口,将动态库与程序代码独立,这样就可以提高代码的可复用度,和......转载 2020-06-10 15:27:21 · 1267 阅读 · 0 评论