随笔分类 - Linux高级编程(DN)
学习DNC++的时候,里面的linux高级编程部分
摘要:文件读写操作fopen fclose fgetc fputcView Code #include <stdio.h>#include <stdlib.h>int main(){ FILE * fp; char ch; if((fp = fopen("file.txt", "w")) == NULL) //如果文件不存在,自动创建。 不能少一个括号!! { printf("Cannot open this file!\n"); exit(0); } else { printf("File open su
阅读全文
摘要:一.信号量(同步)1.回顾:一个进程控制另外一个进程.逻辑变量+pause/sleep+信号2.信号量(semaphore)信号灯三个数据:红灯/绿灯/黄灯60 90 10信号量是共享内存整数数组.根据需要定义指定的数组长度信号量就是根据数组中的值,决定阻塞还是解除阻塞3.编程3.1.创建或者得到信号量semget3.2.初始化信号量中指定下标的值semctl3.3.根据信号量阻塞或者解除阻塞semop3.4.删除信号量semctl案例:A:B创建信号量 得到信号量初始化信号量根据信号量阻塞解除阻塞删除信号量semget函数说明int semget(key_t key, int ...
阅读全文
摘要:一.基于文件的通信1.普通文件(io/mmap)2.有名管道文件3.匿名管道4.Socket二.基于内存的通信0.一组内核内存的工具ipcs ipcs -mipcs -qipcs -sipcrm -q 编号ID1.普通的父子进程之间的匿名内存共享映射2.内核共享内存编程模型2.1.创建共享内存,得到一个ID shmget2.2.把ID影射成虚拟地址(挂载) shmat2.3.使用虚拟地址访问内核共享内存 使用任何内存函数与运算符号2.4.卸载虚拟地址 shmdt2.5.删除共享内存 shctl(修改/获取共享内存的属性) 共享内存的属性案例:A.创建共享内存,并且修改内存数据。1.创建共享内存
阅读全文
摘要:回顾:1.信号的作用2.理解信号:软中断可靠与不可靠信号kill -l3.信号发送与注册kill/raise alarm setitimer signal4.信号的屏蔽sigprocmasksigemptyset sigfillset ...5.信号屏蔽的切换sigpendingsigsuspend=pause+ 指定屏蔽信号pause与sigsuspend都回被信号中断.中断的是pause与sigsuspen,不是进程中其他代码sigsuspend放在sigprocmask环境中思考:5.1.sigsuspend是否影响sigprocmask屏蔽的信号呢?影响.使原来的屏蔽信号全部失效.当s
阅读全文
摘要:问题解答:1.exit(状态码)返回状态码有什么意义?返回值被系统得到.系统根据状态码进行日志记录.返回值被调用者得到:system/wait.程序会根据返回状态码进行对应处理。exit(状态码)=main函数中的return 状态码;2.状态码的第二个字节才是exit()的返回值或者return值。一.进程的基本控制1.进程的常见控制函数1.1.为什么需要控制进程?1.2.pause/sleep/usleep1.3.atexit on_exitView Code #include <stdio.h>#include <stdlib.h> void fun(){ pri
阅读全文
摘要:一.IO与文件目录管理1.pread=lseek+readpread读取以后不改变读写位置2.mmap映射:/proc/${pid}/mem 无法映射3.IO的有效用户与实际用户默认情况:实际用户与有效用户一致。实际用户:执行用户有效用户:权限用户uid_t getuid()uid_t geteuid()View Code #include <fcntl.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>main(){ int fd
阅读全文
摘要:一.IO与文件映射1.IO的共享与效率read与write其中数据缓冲的大小读取数据的缓冲大小:getpagesize。2.定位与定位读取(随机读取)read与write在操作的时候,自动移动读取位置.lseek改变读取位置.pread/pwrite在指定位置读写。2.1.lseek的函数说明: off_t lseek( int fd,//定位文件描述符号 off_t off,//定位位置 int whence//定位参照点:文件开始位置/文件结束...
阅读全文
摘要:一、make与makefile1.回顾:目标的语法目标名:依赖目标@命令@命令make的命令行使用make -f make脚本文件 目标名2.目标的划分目标依赖3.默认规则:a.不指定目标,执行第一个目标b.不指定make文件,默认文件是makefile Makefilemakefile优先4.目标的调用规则:(make把目标当作文件)make执行目标:搜索与目标相同的文件如果文件存在,则判定日期。日期最新,则停止执行,输出提示日期不是最新,则进行执行。比较:当前目标与依赖目标5.建议:只要有文件输出,就把任务作为一个目标,并且把输出的文件作为目标名。6.潜规则(不建议).c目标与.o目标。查
阅读全文
摘要:回顾:1.QT的编译qmake使用*.pro文件格式2.QT的工具帮助文档配置工具UI设计器3.QT的类的使用一.信号与槽1.背景:面向过程模块之间低耦合设计(高内聚).函数调用:直接调用回调调用面向对象模块之间低耦合设计(高内聚).对象调用直接调用接口调用QT:信号与槽解决问题:对象的成员变量的调用?对象的成员函数的调用?案例:窗体,有一个文本框。线程,每隔一秒改变文本框。问题:线程类访问窗体组件比较麻烦,需要传递。在QT中,使用线程程序可能不工作。2.使用信号与槽最大的好处,不通过参数传递,直接调用对象。以及在对象之间传递数据2.1.头与实现必须分开。2.2.必须继承QObject2.3.
阅读全文
摘要:回顾:线程与进程1.进程由于资源独立,进程的主要关注是解决资源共享2.线程先天是数据共享,线程主要关注共享数据脏1.互斥量(线程内) 读写锁2.信号/条件量调度(线程之间)信号量一.线程的信号量1.定义信号量sem_t2.初始化信号量sem_init3.操作信号量sem_post sem_wait4.释放信号量sem_destroy5.其他函数sem_getvalue案例:创建一个子线程子线程-信号量(阻塞)主线程+信号量(解除阻塞)体会:信号量可以累加+-操作单位是1View Code #include <pthread.h>#include <semaphore.h>
阅读全文
摘要:一.多线程1.了解多线程解决多任务实现。历史上Unix服务器不支持多线程Unix/Linux上实现多线程有两种方式:内核支持多线程使用进程的编程技巧封装进程实现多线程:轻量级多线程多线程的库:libpthread.so -lpthreadpthread.h2.创建多线程2.1.代码?回调函数2.2.线程ID?pthread_t2.3.运行线程?pthread_createint pthread_create(pthread_t *th,//返回进程IDconst pthread_attr_t *attr,//线程属性,为NULL/0,使用进程的默认属性void*(*run)(void*),//
阅读全文
摘要:回顾:多进程的问题:数据共享。多进程的问题:进程的上下文环境(context)文件描述符号是整数以及对应上下文环境多进程的问题:上下文环境共享一.SELECT TCP服务器编程模式1.select函数int select(int fds,//建议是监控的文件描述符号的最大值+1fd_set *readfds,//读文件描述符号集合//该参数既是输入,也是输出//输入:被监控的描述符号//输出:有数据的描述符号fd_set *writefds,fd_set *errfds,struct timeval*timeout);//指定阻塞时间限制//为NULL,永久返回:>0:发生改变的文件描述
阅读全文
摘要:一.TCP的编程模型回顾:UDP模型的UML图TCP模型的UML图案例1:TCP的服务器(在案例中使用浏览器作为客户程序)socket建立服务器的文件描述符号缓冲bind把IP地址与端口设置到文件描述符号中listen负责根据客户连接的不同IP与端口,负责生成对应的文件描述符号及其信息accept一旦listen有新的描述符号产生就返回,否则阻塞。View Code //tcpserver.c#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#in
阅读全文
摘要:brk/sbrk维护一个位置。 brk/sbrk改变这个位置。brk改变绝对位置sbrk改变相对位置昨天的补充:永远记住:C的基本类型就那几种。所有全新类型都是使用typedef重新定义的。类型重定义的好处:1. 维护方便2. 便于移植(每个系统中都用同一个名,不用修改)3. 容易理解一、 映射虚拟内存没有任何额外维护数据的内存分配 mmap/munmap1. 函数说明:void *mmap( void *start, //指定映射的虚拟地址,如果为0,则由系统指定开始位置 size_t length,//指定映射空间的大小。 pagesize的倍数 int prot, ...
阅读全文
摘要:malloc怎么分配空间 malloc与new的关系 看完下面的2再回答这个问题。 2. linux对内存的结构描述 a) /proc/${pid}/ 存放进程运行时候所有的信息。程序一结束,该目录就删掉了。 b) 任何一个程序的内存空间其实分成4个基本部分。 i. 代码区 ii. 全局栈区 iii. 堆 iv. 局部栈小实验: 运行一个只包含while(1);的程序,然后另起一个终端,cd /proc下面的对应进程的pid目录,cat maps,查看到运行进程的内存空间分配情况。进程查看: ps aue c) 理解程序的变量与内存空间的关系小实验:#incl...
阅读全文