![](https://img-blog.csdnimg.cn/2019092715111047.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
系统编程笔记
文章平均质量分 58
复习专栏
土豆马铃薯ORZ
咸鱼翻身不粘锅~
展开
-
笔记一 网络编程
协议:一组规则如:ftp,tcp/udp,http…OSI 七层模型:物数网传会表应TCP/IP 四层模型:网网传应应用层:http,ftp,nfs,ssh,telnet…传输层:TCP,UDP网络层:IP,ICMP,IGMP链路层:以太网帧协议,ARPc/s模型(client-server):优点:缓存大量的数据(比如游戏需要提前加载大量的特效等数据),可以自定义协议灵活速度快缺点:因为需要安装软件所以安全性会低一些,开发工作量大b/s模型(browser-server):优点:安原创 2020-09-03 08:36:54 · 262 阅读 · 0 评论 -
系统编程 笔记11
信号集操作函数:sigset_t set;;自定义一个信号集方法如左,下面是操作set的函数sigemptyset(sigset_t *set); 清空信号集 可以理解为初始化sigfillset(sigset_t *set); 信号集中全部置1sigaddset(sigset_t *set, int signum); 将一个信号添加到集合中置1sigdelset(sigset_t *set, int signum); 将一个信号从集合中移除sigismember(const sigset_t原创 2020-05-26 22:12:28 · 160 阅读 · 0 评论 -
系统编程 笔记10
信号共性:简单,不能携带大量信息,满足条件才发送。信号的特质:信号是软件层面上的“中断”。一旦信号产生,无论程序执行到什么位置,必须立即停止,处理信号,处理结束,再继续执行后续指令。所有信号的产生及处理都是由内核完成的。产生信号:比如按键产生比如“ctrl + c”,系统调用:kill,软件产生:比如sleep函数,硬件异常产生:比如段错误,命令:kill信号有两种状态:递达:内核发出并到达指定目标未决:产生和递达之间的状态...原创 2020-05-26 00:58:54 · 129 阅读 · 0 评论 -
系统编程 笔记9
兄弟进程间通信:需要注意关闭父进程的读端和写端。有名管道fifo:和匿名管道一样也是在内核空间创建一个缓冲区,但是区别在于这个管道有名。命令创建:mkfifo …函数原型:int mkfifo(const char* pathname, mode_t mode);这个管道可以让两个没有血缘关系的进程间通信。文件进程间通信:利用fork函数,父子进程之间共享文件描述符,也就共享了打开的文件。无血缘关系的进程也可以,简单来说就是两个进程访问同一个文件并往里写或读数据,也就类似于两个进程间通信了。(原创 2020-05-15 03:08:02 · 124 阅读 · 0 评论 -
系统编程 笔记8
-------------------------------------进程间通信-------------------------------------原创 2020-05-14 00:16:01 · 152 阅读 · 0 评论 -
系统编程 笔记7
gdb调试:1.set follow-fork-mode child 命令设置gdb在fork之后跟踪子进程2.set follow-fork-mode prarent 设置跟踪父进程exec函数族:简单来说就是当程序执行了fork()(此时程序变成了父进程),默认情况下父进程有的代码子进程也有,但是如果有了exec这个函数,子进程中的所有代码会被清空,去执行你指定的一个程序,比如写了exec(a.out),那么子进程将执行的是a.out这个程序。但是子进程PID没有变,还是父进程的儿子,只是它的原创 2020-05-12 17:30:16 · 425 阅读 · 0 评论 -
系统编程 笔记6
进程:活的,运行起来的程序,占用内存,cpu等资源。–戏程序:死的,只占用磁盘空间 –剧本并发:在操作系统中,一个时间段中有多个进程都处于已启动运行到运行完毕之间的状态。但,任意时刻点上仍只有一个进程在运行。对于在内核空间里的进程,它们通过MMU映射到磁盘空间是在同一个区域,因为PCB本质是一个结构体,在内核中有充足的空间来同时储存多个结构体。因为这个特性才有了进程间的通讯,如果没有映射到同一个空间那就没有了进程间的通讯。ps aux查看进程信息进程状态:初始态,就绪态,运行态,挂起态,终止态其中原创 2020-05-10 23:24:35 · 145 阅读 · 0 评论 -
系统编程 笔记5
link unlink函数在inode之外有个目录项dentry,这并不多余,这主要是为了实现文件共享,Linux允许多个目录项共享同一个文件,link函数可以为已经存在的文件创建目录项(硬链接)int link(const char *oldpath,const char *newpath)成功返回0,失败返回-1 并errno为相应的值。int unlink(const char *path)成功返回0,失败返回负值。对于删除文件,可以说是将文件的硬链接删除完,从而让文件具备被系统释放的条件原创 2020-05-10 23:23:52 · 120 阅读 · 0 评论 -
系统编程 笔记4
文件大致组成如图inode:本质是一个结构体,储存文件的属性信息。如:权限,类型,大小。。。。也叫文件属性管理结构,大多数的inode储存在磁盘上。dentry(目录项):本质依然是结构体,其中重要的成员变量有两个{文件名,inode……},文件的内容是保存在磁盘中的。所以一个文件描述主要就由上面两个东西组成。stat函数:获取文件属性int stat(const *path, struct stat *buf);参数:path:文件路径buf:传出参数,存放文件属性,inode结构体指针。原创 2020-05-10 23:21:22 · 157 阅读 · 0 评论 -
系统编程 笔记3
fcntl函数:int fcntl(int fd, int cmd, … /* arg */ );//文件描述符 控制命令 可变参数主要看控制命令是什么获取文件状态(实质上是一个位图数据):F_GETFL设置文件状态:F_SETFLint flags = fcntl(fd,F_GETFL);flags介绍:是fcntl返回出来的一个位图数据表示了各个属性的状态,比如文件是否阻塞,是否可截断。。。。flags = fcntl(STDIN_FILENO,F_GETFL);flags |= O_NO原创 2020-05-10 16:04:13 · 99 阅读 · 0 评论 -
系统编程 笔记2
1.库函数和系统函数的对比(得在一定条件下,得在系统函数那个程序把buf设置成1,如果设置成4096那么两个程序的速度是一样的)使用库函数虽然看似比直接使用系统调用多了一步,但是从用户空间进入内核空间耗时巨大,在对比库函数和系统函数的copy.c中,系统函数buf被设置成1时,程序每读取一个字节就得完成一次内核空间和用户空间的跳转,而库函数(fputc函数),在函数内部有一个buf而这个buf默认是4096,也就是内核空间的缓冲向磁盘写入所需要的值(每当内核空间缓冲满4096,就向磁盘写入数据),所以可以原创 2020-05-10 02:51:42 · 204 阅读 · 0 评论 -
系统编程 笔记1
系统调用(内核提供的函数) ;open函数的真正系统调用函数 sys_open;read函数的真正系统调用函数 sys_read;所以真正open read函数严谨的来说不叫系统调用叫系统函数,sys_read sys_open是系统调用,两种基本没区别,就是换了一个壳;内核里头主要是驱动最后会对应到硬件的各个部件 ;如:printf(“hello”);需要打印到显示屏上需要通过系统调用进入内核,再通过内核的各个驱动(显卡驱动),将hello打印到公屏;1.open函数:头文件:#include原创 2020-05-09 22:27:52 · 181 阅读 · 1 评论