【LINUX】编程笔记

a storage class can only be specified for objects and functions

extern修饰一个struct报错,错误原因如上,C++中存储类修饰符有auto、register、extern、static,这几种修饰符只能修饰对象或者函数,这里用extern来修饰struct是错误的。

g++生成动态链接库的命令

-shared表示是标准对象,-fPIC表示函数能够重定向。

g++ -o libThreadPool.so -shared -fPIC ThreadPool.cpp -l pthread

g++调用本地动态库编译命令

-L指定动态库搜索路径,如果系统默认路径找不到,就到-L指定路径搜索

g++ -o testpool testpool.cpp -l ThreadPool -L ./

g++的命令中 -g生成调试信息以后,查看core时就可以bt查看调用堆栈

查看core信息

gdb a.out

core core.xxxxx

bt

此时可以p查看各个变量的值来更精确定位错误

查看文件链接的动态库信息

ldd execfile

同步/异步

同步和异步往往和线程有关系,比如SendMsg,线程A->线程B,发送消息后需要等待其他线程或进程的响应。

如果SendMsg以后线程A等待线程B返回响应消息,线程才继续处理,这就是同步

如果SendMsg以后线程A就继续做自己的事情,而注册了一个回调或者响应线程来处理线程B的响应消息,这就是异步

同步往往是阻塞的

异步往往是非阻塞的

阻塞/非阻塞

阻塞read:线程将阻塞,直到有可读的数据。

非阻塞read:设置O_NOBLOCK以后,如果fd没有可读的数据,read将立即返回-1并设errno为EAGAIN。

在有可读数据时阻塞与非阻塞read是一样的。

阻塞write:data从user-mode空间move到kernel-mode空间,之后系统完成kernel-mode到物理缓冲的处理并返回,然后阻塞IO返回。

非阻塞write:data从user-mode空间move到kernel-mode空间,write返回。

linux信号

linux向指定进程发指定信号

kill -s signal_name/signal_no  pid

signal_number   sig Value

0               0

1               SIGHUP

2               SIGINT

3               SIGQUIT

6               SIGABRT

9               SIGKILL

14              SIGALRM

15              SIGTERM

64位下的long长度是64

linux下查看内存的方式

x/100x 0x46505650

undefined reference to

可能依赖库的顺序不对

gdb调试信号,避免gdb把信号接管

handle SIGINT nostop print pass

signal SIGINT

子进程如何知道父进程是否退出

1.getppid,如果等于1表示父进程已经退出

2.注册信号,父进程退出时给子进程发送信号

3.管道处理,父进程和子进程建立管道,定时收发消息,通过管道保持联络

4.父进程锁一个文件,子进程检查锁,如果不能得到锁,说明父进程还在

nohup方式启动进程   nohup processname &

以nohup方式启动,起到守护进程的作用

解决gcc乱码   LANG=en_us

gdb多进程调试

方法1:调试多进程最土的办法:attach pid

方法2: set follow-fork-mode child + main断点

方法3: set follow-fork-mode child + catch exec

最近最好玩的笑话:朋友想做一个包子,结果做成了锅盔,感慨道:包子呀,你注定做不了自己。

还有我那思路超级发散的媳妇,大家讨论说多招几个人,招够4个人就可以搓麻将了,她瞬间回了一句,招够7个多好,可以召唤龙珠了!

我是一个无趣的家伙,可我的生活很好玩,贱贱的朋友、萌哒哒的老婆、还有摄影师+大厨的朋友、还有还有......

【LINUX】编程笔记

时间: 2024-09-30 22:39:32

【LINUX】编程笔记的相关文章

Linux 编程笔记(三)

上一章节对文件的基本属性做了一个笔记,续上次笔记对Linux文件的属性和属性组做一笔记 我安装的是虚拟机操作系统的版本还KaliLinux但是系统启动速度拖延,所以刚开始还是配置Centos 1.Linux文件属主和属组:在Linux 操作系统中按照文件所有者.文件所有者同组用户和其他用户规定了不同的文件访问权限,但是root用户基本不受权限的限制. 更改文件属性-----------语法:chgrp[-R]属组文件名参数 -R递归更改文件名. 更改文件属主------------语法:chow

Linux 编程笔记(四)

一.用户和用户组管理 添加新的用户账户使用useradd 格式useradd   选项  用户名 1.创建一个用户tian 其中 -d -m参数用来为登陆,登录名产生一个主目录 /usr/tian(其中/usr为默认的用户主目录所在的父目录) 2.创建一个用户gem,用户登陆Shell是/bin/sh属于group组,同时属于adm和root用户组,命令如下: # useradd -s /bin/sh -g group -G adm, root gem 3.删除账户,将用户账号从/etc/pas

linux网络编程笔记——TCP

1.TCP和UDP TCP是长连接像持续的打电话,UDP是短消息更像是发短信.TCP需要消耗相对较多的资源,但是传输质量有保障,UDP本身是不会考虑传输质量的问题. 2.网络传输内容 我习惯的做法是直接通过TCP传送结构体,当然前提是收发两端都在程序里对目标结构体有充分的定义.特别说明的一点是,要小心收发两端处理器的大小端问题!而且传输信息头里必须包含长度信息,而且通用的是大端.但是,这里的长度和结构体,我选择用小端进行传输. 3.TCPserver实现 参考了别人多线程的回调写法,看起来不错.

linux网络编程笔记——UDP

目前这部分代码会出现阻塞问题,暂时尚未解决 #include "udp.h" #include <stdio.h> #include <string.h> #include <stdlib.h> #include <unistd.h> #include <errno.h> #include <malloc.h> #include <sys/types.h> #include <sys/socket

进程和程序:编写shell——《Unix/Linux编程实践教程》读书笔记(第8章)

1.Unix shell的功能 shell是一个管理进程和运行程序的程序.所有常用的shell都有3个主要功能: (1)运行程序: (2)管理输入和输出 (3)可编程 shell同时也是带有变量和流程控制的编程语言. 2.Unix的进程模型 一个程序是存储在文件中的机器指令序列,一般它是由编译器将源代码编译成二进制格式的代码.运行一个程序意味着将这些机器指令序列载入内存然后让处理器(CPU)逐条执行.在Unix术语中,一个可执行程序是一些机器指令机器数据的序列.一个进程是程序运行时的内存空间和设

系统调用操作文件——《Unix/Linux编程实践教程》读书笔记

1.who命令通过读系统日志的内容显示当前已经登录的用户. 2.Unix系统把数据存放在文件中,可以通过以下系统调用操作文件: open(filename, how) creat(filename, mode) read(fd, buffer, amt) write(fd, buffer, amt) lseek(fd, distance, base) close(fd) 3.进程对文件的读/写都要通过文件描述符,文件描述符表示文件和进程之间的连接. 4.每次系统调用都会导致用户模式和内核模式的切

终端控制和和信号——《Unix/Linux编程实践教程》读书笔记(第6章)

1.有些程序处理从特定设备来的数据.这些与特定设备相关的程序必须控制与设备的连接.Unix系统中最常见的设备是终端. 2.终端驱动程序有很多设置.各个设置的特定值决定了终端驱动程序的模式.为用户编写的程序通常需要设置终端驱动程序为特定的模式. 3.键盘输入分为3类,终端驱动程序对这些输入做不同的处理.大多数建代表常规数据,它们从驱动程序传输到程序.有些键调用驱动程序中的编辑函数.如果按下删除键,驱动程序将前一个字符从它的行缓冲中删除,并将命令发送到终端屏幕,使之从显示器中删除字符.最后,有些键调

目录与文件属性——《Unix/Linux编程实践教程》读书笔记

1.ls产生一个文件名的列表,它大致是这样工作的: open directory +-> read entry - end of dir? -+ |__ display file info | close directory <--------------+ 2.目录是一种特殊的文件,它的内容是文件和目录的名字.与普通文件不同的是,目录文件永远不会空,每个目录至少包含2个特殊的项,即 "."和"..",其中 "."不是当前目录,&qu

storysnail的Linux串口编程笔记

storysnail的Linux串口编程笔记 作者 He YiJun – storysnail<at>gmail.com 团队 ls 版权 转载请保留本声明! 本文档包含的原创代码根据General Public License,v3 发布 GPLv3 许可证的副本可以在这里获得:http://www.gnu.org/licenses/gpl.html 本文档根据GNU Free Documentation License 1.3发布 GFDL1.3许可证的副本可以在这里获得:http://w