
Linux/Unix编程
文章平均质量分 60
梅菲斯特eda
且听风吟
展开
-
Linux C/C++解析xls
libxls作为开源库,支持在Linux C/C++ 环境下解析(读)xls文件,github提供了源码:https://github.com/libxls/libxls但是github的源码需要一堆辅助工具,才能够编译出libxls的C静态库,因此琢磨了下手动编译libxls的静态库/动态库方法,可以摆脱辅助工具缺失乃至版本问题导致的抓狂,尤其适合不方便联网的内网开发环境。将fuzz、src、include目录下所有文件拷贝到一个目录下,修改*.c和*.h文件中指定的include文件路径为当原创 2021-11-09 10:03:21 · 2559 阅读 · 0 评论 -
Linux网络编程实例分析
最近由于工作原因需要温习一下Linux网络编程的部分基础知识,因此对之前写的Socket网络通信的代码进行了进一步优化和拓展,在不关闭一次Socket连接的基础上,对服务端加入循环读写的功能,同时加入连接检测函数,防止客户端意外断开(例如Ctrl + C杀掉客户端程序),服务端程序陷入死循环。增加客户端退出命令(服务端亦接收此命令),增加客户端执行服务端程序的命令,这里主要用到了strncasec...原创 2019-11-15 20:33:49 · 437 阅读 · 1 评论 -
Makefile和Shell学习笔记
Makefilemakefile定义了一系列的规则来指定文件的编译过程和一些复杂的功能操作。makefile带来的好处就是——“自动化编译”,通过make命令,整个工程完全自动编译,极大的提高了软件开发的效率。makefile默认从第一个target开始执行command命令,如果后面的target不是第一个target的子程序或者子程序的后续程序,就不会在make命令下执行,需要使用ma...原创 2019-09-12 17:35:57 · 332 阅读 · 0 评论 -
内存中的堆和栈
一般认为在c中分为这几个存储区 1.栈 - 有编译器自动分配释放 ;2.堆 - 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收 ;3.全局区(静态区),全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块 区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域; -> 程序结束释放 4.另外还有一个专门放常量的地方; - >程序结束释放...转载 2018-11-12 11:01:17 · 325 阅读 · 0 评论 -
关于Socket通信客户端是否需要绑定端口号
参见http://blog.chinaunix.net/uid-23193900-id-3199173.html无连接的socket的客户端和服务端以及面向连接socket的服务端通过调用bind函数来配置本地信息。使用bind函数时,通过将my_addr.sin_port置为0,函数会自动为你选择一个未占用的端口来使用。Bind()函数在成功被调用时返回0;出现错误时返回"-1"并将errn...转载 2018-11-08 18:11:09 · 21726 阅读 · 0 评论 -
Socket通信之操作系统的字节序和位数
关于Socket通信过程中字节序在网络编程里,网络字节序是big-endian的,而大部分的PC的系统都是X86处理器系列,X86采用的是little-endian,所以需要将网络数据流转换成本地数据流的话,需要进行字节序的转换。标准库里提供了hlton()和nthl()两个函数来支持转换。hston(unsigned short), hlton(unsigned long) 将本地...原创 2018-11-08 16:40:12 · 1198 阅读 · 0 评论 -
Linux进程通信中IPC对象——IPC_PRIVATE与ftok
在linux中,可以使用IPC对象来进行进程间通信。IPC对象存在于内核中,多进程可以操作同一个IPC对象。每个IPC对象都有一个唯一的编号,该编号是由系统分配的。那么不同的进程如何知道这个编号,进而通过它进行通信呢?下面以共享内存为例,进行分析。方法一:通过ftok函数,产生相同的键值。假设,进程p1创建了共享内存。可以在创建时,调用ftok函数,得到一个key值,调用shmget函数,...转载 2018-11-05 17:43:07 · 941 阅读 · 0 评论 -
return与exit()
1.return是C语言提供的,exit()是操作系统提供的(或者函数库中给出的)。exit()是一个库函数,通常情况:exit(0)表示程序正常,exit(1)和exit(-1)表示程序异常退出,exit(2)表示表示系统找不到指定的文件。在整个程序中,只要调用exit()就结束(当前进程或者在main()时候为整个程序)。在stdlib.h中exit()函数是这样子定义的:void exit(...转载 2018-11-09 21:54:15 · 233 阅读 · 0 评论 -
位序、字节序、类型序
计算机学科中的很多问题,都是因为概念的抽象模糊,导致理解上的不确定性,增加学习领悟的难度。对于计算机中数据存放次序的问题,很多教材或文章要么含糊其辞,要么凭空飞来结论,让人看的一头雾水。几经周折,结合多篇文章,对内存中数据存放次序终于有了较深入的理解,现记录如下:一、几个概念: 1.内存中关于数据的存放顺序有三个层次(即三种不同的视角): ...转载 2018-11-06 21:58:56 · 4123 阅读 · 0 评论 -
初识Linux C线程
线程与进程进程是操作系统资源分配的基本单位,而线程是任务调度和执行的基本单位,线程在某种程度上可以看做轻量级的进程。每个进程都有独立的代码和数据空间,程序间的切换会有较大开销;同一组线程可以共享代码和数据空间,每个线程仍具有自己独立的运行栈和程序计数器,程序之间切换的开销也较小。由于线程共享进程地址空间的所有资源,所以线程之间的通信很方便;多个线程处理不同人物,增加了程序的并发性,是程...原创 2018-11-06 16:51:50 · 179 阅读 · 0 评论 -
Linux文件中的stat结构
结构体statLinux文件系统以块为单位存储信息,为了找到某一个文件所在的存储空间的位置用一个数据结构来对每个文件进行索引,而stat显示的就是该结构体信息,下面我们可以来看下这个结构体。struct stat { mode_t st_mode; //文件对应的模式,文件,目录等 ino_t st_ino; /...转载 2018-11-03 20:05:26 · 1002 阅读 · 0 评论 -
Linux下进程通信知识点学习笔记(一)
4种主要事件导致进程创建:系统的初始化; 执行了正在运行的进程所调用的进程创建系统调用; 用户请求创建一个进程; 一个批处理作业的初始化;进程的终止:正常退出; 出错退; 严重错误; 被其他进程杀死;当编译器给定程序的编译工作之后,编译器执行一个系统调用,通知操作系统它的工作已经完成,在unix/linux系统中调用的是exit()。进程的状态:运行态,就绪态,阻塞态;...原创 2018-11-03 16:51:43 · 414 阅读 · 0 评论 -
进程创建函数fork()和vfork()
Linux下使用fork()创建一个新的进程,该函数不需要参数,返回值是一个进程id。对于不同的对象,分别是:新建的子进程id(返回给父进程),0(返回给创建的子进程)或者-1(子进程创建失败,返回给父进程)。创建的新进程在得到一个新的进程id之后,将拷贝父进程空间中内容至子进程,包括父进程的数据段和堆栈段,并且子进程和父进程共享代码段。vfork()和fork()则不一样,父子进程共享地址空间,...原创 2017-11-10 08:58:10 · 738 阅读 · 0 评论 -
Linux C程序命令行传参
在命令行环境下,执行已编译的程序时,将命令行参数以同一行的附加参数的形式传入到要执行的程序中。C编译器允许main()函数没有参数,或者有两个参数(也有可能更多,是对标准的扩展)。一般形式为“int main(int argv;char* argv[])”,其中第一个参数argc代表命令行中字符串个数(系统以空格作为一个字符串结束的标志);第二个参数*argv[]是一个字符指针组成的数组或...原创 2018-04-18 15:56:00 · 14047 阅读 · 0 评论 -
Ubuntu中APUE 3rd中实例编译时err_sys函数找不到解决方法
在APUE官网http//www.apuebook.com上下载相应版本的程序包资源,在终端cd到程序包(程序包中有README说明文件),执行make命令。之后在安装包中找到apue.h头文件移动到-计算机/usr/include/ (或者移动到自己编辑C源文件的目录下) ; 将作者自己编写静态库文件libapue.a也移动到编辑C源文件的目录下。编写一个书中实例进行测试。...原创 2018-01-08 15:17:58 · 742 阅读 · 0 评论 -
Linux/Unix中的重定向简单实例
“重定向”是指修改原来默认的一些东西,对原来系统命令的默认执行方式进行改变。令程序与文件一同工作的方式有两种:一种是明确地使用打开文件、关闭文件、读文件、写文件等专门的函数(比如fopen(),fclose())。另一种就是使用一个设计用于与键盘和屏幕共同工作的的程序,但是使用不同通道的重定向输入和输出。Linux中重定向符号包括输入“<”和输出“>”,利用一个简单地小程序来演示Lin...原创 2018-01-12 18:40:16 · 1158 阅读 · 0 评论