linux高级编程
算法+数据结构
这个作者很懒,什么都没留下…
展开
-
Linux下创建可执行bin安装文件
源地址:https://www.linuxidc.com/Linux/2019-08/159988.htm【应用场景】简化操作,对于有些安装操作而言,需要包含安装脚本和脚本需要的文件两部分,封装成可执行bin文件之后就只有一个安装包了。代码保护,在很多情况下,我们并不希望用户可以直接接触到代码部分,这种情况下,我们就更需要封装成bin文件来安装了。【基本原理】其实说起来很简单,可执行bin文件,其实就是将安装脚本和脚本需要的文件同时放到了同一个文件里面,然后在脚本里面去读取bin文件最后转载 2020-05-22 11:19:48 · 1043 阅读 · 0 评论 -
linux ubuntu下C语言与数据库mysql连接
MySQL数据库环境配置首先需要安装MySQL客户端和服务器,命令行安装方式为:[cpp] view plaincopyprint?sudo apt-get install mysql-server mysql-client sudo apt-get install mysql-server mysql-client然后,要使用C语转载 2013-10-21 18:53:28 · 1215 阅读 · 0 评论 -
Linux内核模块导出后无法调用问题解决(模块间函数调用通讯)
Linux模块间通讯方法非常的多,最便捷的方法莫过于函数符号导出,然后直接调用。然而在linux2.6.26以后的内核中模块的符号导出经常会出现问题,一个模块中的导出符号不能被另外一个模块进行调用。这个使得处理有依赖关系的模块非常的头疼。1. 符号导出函数EXPORT_SYMBOL() EXPORT_SYMBOL标签内定义的函数对全部内核代码公开,不用修改内核代码就可以在您的内核模转载 2013-10-30 16:50:23 · 833 阅读 · 0 评论 -
linux设备驱动概述
应用程序与库函数、内核、驱动之间的关系应用程序、库、内核、驱动程序的关系:应用程序调用应用程序函数库完成功能、应用程序以文件形式访问各种资源、应用程序函数库、部分函数直接完成功能、部分函数通过系统调用。 由内核完成内核处理系统调用。 调用设备驱动程序,设备驱动直接与硬件通信。 它们之间的关系如下图所示设备类型:常见的设备有三类:字符设备、块设备、网络设备。转载 2013-11-01 11:59:51 · 904 阅读 · 0 评论 -
linux高级编程之read和write用法
#include #include #include #include #include #include int main(int argc,char *argv[]){ if(argc!=3){ printf("operate error\n"); return -1; } int fd1,fd2,ret,dest; char原创 2013-09-18 18:57:30 · 1023 阅读 · 0 评论 -
孤儿进程和僵尸进程总结
1、前言 之前在看《unix环境高级编程》第八章进程时候,提到孤儿进程和僵尸进程,一直对这两个概念比较模糊。今天被人问到什么是孤儿进程和僵尸进程,会带来什么问题,怎么解决,我只停留在概念上面,没有深入,倍感惭愧。晚上回来google了一下,再次参考APUE,认真总结一下,加深理解。2、基本概念 我们知道在unix/linux中,正常情况下,子进程是通过父进程创建的,子进程在创建新的转载 2014-09-23 14:54:12 · 530 阅读 · 0 评论 -
用户空间,内核空间内存分布
原创 2014-09-23 17:54:23 · 548 阅读 · 0 评论 -
FTP 客户端程序
FTP 概述文件传输协议(FTP)作为网络共享文件的传输协议,在网络应用软件中具有广泛的应用。FTP的目标是提高文件的共享性和可靠高效地传送数据。在传输文件时,FTP 客户端程序先与服务器建立连接,然后向服务器发送命令。服务器收到命令后给予响应,并执行命令。FTP 协议与操作系统无关,任何操作系统上的程序只要符合 FTP 协议,就可以相互传输数据。本文主要基于 LINUX 平台,对 FTP转载 2014-09-03 09:36:45 · 1211 阅读 · 0 评论 -
C++ 简单实现HTTP GET/POST 请求
转载出处:详情http://m.blog.csdn.net/article/details?id=16336713HTTP(超文本传输协议)是一种客户端与服务端的传输协议,最早用于浏览器和服务器之间的通信,后来因为其使用灵活、方便等特点,广泛用于客户端与服务端的通信。文章将简单介绍HTTP协议,同时以C++方式分别实现HTTP GET、POST 请求HTTP 请求报文HTTP请求报转载 2016-05-04 09:56:48 · 10202 阅读 · 0 评论 -
Linux的进程/线程间通信方式总结
Linux系统中的进程间通信方式主要以下几种:同一主机上的进程通信方式 * UNIX进程间通信方式: 包括管道(PIPE), 有名管道(FIFO), 和信号(Signal) * System V进程通信方式:包括信号量(Semaphore), 消息队列(Message Queue), 和共享内存(Shared Memory)网络主机间的进程通信方式转载 2016-05-16 14:52:47 · 535 阅读 · 0 评论 -
linux内存分布
如下图所示:按照内存地址由高到低的顺序栈: 由编译器自动分配释放管理. 用于函数调用,保存函数的返回地址,函数的参数,函数内部定义的局部变量.堆 : 需要由程序员分配释放管理,若程序员不释放,程序结束时可能由OS回收。通常在堆中进行动态存储分 配。(建议一定要手动释放,不然会造成内存泄漏)未被初始化数据段(bbs)转载 2016-05-17 15:27:47 · 881 阅读 · 0 评论 -
c源文件到执行文件的编译过程
编译,编译程序读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,再由汇编程序转换为机器语言,并且按照操作系统对可执行文件格式的要求链接生成可执行程序。C源程序头文件-->预编译处理(cpp)-->编译程序本身-->汇编程序-->链接程序–>可执行文件1.编译预处理读取c源程序,对其中的伪指令(以#开头的指令)和特殊符号进行处理[析] 伪转载 2016-05-17 15:29:14 · 1880 阅读 · 0 评论 -
wireshark数据包格式的基本介绍
wireshark介绍wireshark的官方下载网站: http://www.wireshark.org/wireshark是非常流行的网络封包分析软件,功能十分强大。可以截取各种网络封包,显示网络封包的详细信息。wireshark是开源软件,可以放心使用。 可以运行在Windows和Mac OS上。 使用wireshark的人必须了解网络协议,否则就看不转载 2016-05-19 10:06:27 · 4143 阅读 · 0 评论 -
该虚拟机的某个磁盘已经由虚拟机或者快照使用
解决方法:新建虚拟机,硬盘选择现有的硬盘,找到你移动的硬盘,添加就可以了;新建虚拟机时注意两个地方:1.刚开始选择创建的时候,选择第二个自定义,如图,2,往下依次根据自己的需求点击下一步就行了,当执行到选择磁盘的时候,选择第二个选项 使用现有磁盘 ,选择你自己的系统磁盘,如图,点击启动问题就解决了。。。原创 2017-10-10 15:37:50 · 14729 阅读 · 1 评论 -
互斥锁mutex
1. 创建和销毁有两种方法创建互斥锁,静态方式和动态方式。POSIX定义了一个宏PTHREAD_MUTEX_INITIALIZER来静态初始化互斥锁,方法如下: pthread_mutex_t mutex=PTHREAD_MUTEX_INITIALIZER; 在LinuxThreads实现中,pthread_mutex_t是一个结构,而PTHREAD_MUTEX_INITIALIZER则是原创 2013-10-16 20:34:56 · 1447 阅读 · 0 评论 -
守护进程
1、概念:是运行在后台,并确一直在运行的特殊进程,独立于控制终端并确周期性的执行某种任务或等待处理某些发生的事件。2、特点:(1)运行在后台。 (2)必须与其运行前的环境(为关闭的文件描述符、控制终端、会话、进程组、工作目录、文件创建掩码等)隔离开来。 (3)启动时从启动脚本/etc/rc.d或作业规划进程crond或用户终端(shell)启动执行。3、转载 2013-10-16 20:05:45 · 618 阅读 · 0 评论 -
mmap
#include #include #include #include #include #include #include int main(void){ int *p; int fd; fd=open("hello",O_RDWR); if(fd<0){ perror("open hello\n"); exit(1); }原创 2013-09-18 19:21:16 · 783 阅读 · 0 评论 -
TCP建立连接结束过程,client与server数据传输
/*client.c*/#include #include #include #include #include #include #define MAXLINE 80#define SERV_PORT 8000int main(int argc,char *argv[]){ struct sockaddr_in servaddr; char原创 2013-09-18 18:42:04 · 2161 阅读 · 0 评论 -
myls-l.c 实现ls -l指令
#include #include #include #include #include #include #include #include #include #include char bit[10];char *judge_filedir(mode_t st_mode,char bit[10]){ if(S_ISREG(st_mod原创 2013-09-18 19:51:38 · 2431 阅读 · 0 评论 -
客户端往服务器端传送文件
客户端#include #include #include #include #include #include #include #include #include #define MAXLINE 80#define SERV_PORT 8000int mycp(int fd,int socketfd) /*文件复制*/{ cha原创 2013-09-22 20:56:53 · 855 阅读 · 0 评论 -
关于客户端程序总结
#include #include #include #include #include #include #define MAXLINE 80#define SERV_PORT 8000 /*端口号*/int main(int argc,char *argv[]){ struct sockaddr_in servaddr; /*定义服务器套原创 2013-09-22 19:39:49 · 706 阅读 · 0 评论 -
关于服务器端程序总结
#include #include #include #include #include #include #define MAXLINE 80#define SERV_PORT 8000int main(void){ struct sockaddr_in servaddr,cliaddr;/*定义服务器套接字结构体和客户端结构体*/ socklen原创 2013-09-22 20:00:02 · 1144 阅读 · 0 评论 -
TCP编写简单的配置文件(客户端)
file=fopen("client","r");/*打开配置文件服务器端IP和PORT*/ if(file==NULL){ printf("fopen error\n"); return -1; } fscanf(file,"ip:%s\nport:%ld",ip,&port);/*fscanf读取配置文件中的IP和PORT*/ inet_pton(AF_INET原创 2013-09-22 20:08:47 · 952 阅读 · 0 评论 -
exec函数
char *const ps_argv[] ={"ps", "-o", "pid,ppid,pgrp,session,tpgid,comm", NULL};char *const ps_envp[] ={"PATH=/bin:/usr/bin", "TERM=console", NULL};execl("/bin/ps", "ps", "-o", "pid,ppid,pgrp,se原创 2013-09-23 20:31:59 · 671 阅读 · 0 评论 -
fork实现父进程下有多个子进程
/*父进程下多个子进程*/#include #include int main(void){ pid_t pid; int i; for(i=0;i<5;i++){ /*给一结束条件,有5个子进程*/ pid=fork();/*fork复制子进程*/ if(pid<0){ printf("error\n"); } if(pid=原创 2013-09-23 20:42:09 · 1257 阅读 · 0 评论 -
fork实现父进程下有子进程,子进程下又有子进程
/*父进程下有子进程又有子子进程*/#include #include int main(void){ pid_t pid; int i; pid=fork();/*复制出一个子进程*/ for(i=0;i<5&&pid==0;i++){/*i<5控制可以建5个进程,pid=0是子进程。此代码实现在子进程下再复制出子进程,依次复制*/ pid=fork原创 2013-09-23 20:48:04 · 865 阅读 · 0 评论 -
exec系列函数
1.exec家族一共有六个函数,分别是:(1)int execl(const char *path, const char *arg, ......);(2)int execle(const char *path, const char *arg, ...... , char * const envp[]);(3)int execv(const char *path, char *co转载 2013-10-10 16:22:34 · 922 阅读 · 0 评论 -
网络编程--客户端与服务器端总结
一 三种类型的套接字: 1.流式套接字(SOCKET_STREAM) 提供面向连接的可靠的数据传输服务。数据被看作是字节流,无长度限制。例如FTP协议就采用这种。2.数据报式套接字(SOCKET_DGRAM) 提供无连接的数据传输服务,不保证可靠性。3.原始式套接字(SOCKET_RAW) 该接口允许对较低层次协议,如IP,ICMP直接访问。转载 2013-10-10 16:42:20 · 897 阅读 · 0 评论 -
线程--条件变量Condition Variable
条件变量 条件变量是利用线程间共享的全局变量进行同步的一种机制,主要包括两个动作:一个线程等待"条件变量的条件成立"而挂起;另一个线程使"条件成立"(给出条件成立信号)。为了防止竞争,条件变量的使用总是和一个互斥锁结合在一起。 1. 创建和注销 条件变量和互斥锁一样,都有静态动态两种创建方式,静态方式使用PTHREAD_转载 2013-10-16 19:57:58 · 878 阅读 · 0 评论 -
非阻塞读终端与等待超时
#include #include #include #include #include #include #define MSG_TRY "try again\n"#define MSG_TIMEOUT "time out\n"int main(void){ int n,i,fd; char buf[10]; fd=open("/dev原创 2013-09-18 19:06:39 · 1093 阅读 · 0 评论