说到 linux 的文件系统,好多人第一印象是 ext2/ext3/ext4 等具体的文件系统,本文不涉及这些,因为研究具体的文件系统难免会陷入细节,甚至拉大段的源码做分析,反而不能从宏观的角度把握文件系统要解决的问题。一个通用的 linux 文件系统都包含哪些概念?接口如何使用?设计层面需要考虑什么问题?这都在本文的讨论范围。当然了,内容都是从 apue 搬运过来的,经过了一点点梳理加工,原书还是基于比较老的 UFS (Unix File System) 进行说明的,有些东西可能已经过时了,不过原理层面的东西还是相通的,看过之后举一反三就好。
最近在学习UNIX的编程,用的书是《UNIX环境高级编程》,看到书中有很有实例,我用的操作系统是RadHat,照着书把程序清单输入后编译却通不过,显示的错误是没有“apue.h头文件”。这下对我这只菜鸟来说就是当头一棒,这不坑爹吗?就照着书把程序再抄了一遍,发现出现同样的问题,这下引起我的思考。原来apue.h是作者自己写的一个文件,包含了常用的头文件,系统不自带。其中包含了常用的头文件,以及出错处理函数的定义。需要自己去配置这样的头文件,特将解决的方法总结如下: 在http://www.ap
这次吧,我也实在给自己找不到偷懒的借口了,总之一句话:有好多话现阶段我不能敞开聊。比如有可能在将来某一天,老李也老母鸡翻着跟头生孩子---滚蛋,滚蛋回老家了,滚蛋离开这行业了,就啥也能叨叨了。不过咋说吧,感谢各位的长期关注,这段时间莫名其妙的增长关注量让我觉得我不能太懒惰了寒了大伙儿的心,以后保持周更级别的活跃更新发文的节奏,准备更一个比较简单平时用的比较多的业务方向系列:《API安全指东》。
在 「关于我 」那篇博文里,朋友们应该知道了我不是科班出身,是由机械强行转行到Linux应用开发方向。下面我就详细向大家介绍自己这一路上的转行历程,希望对大家有所启发。
众所周知,通过 tcgetattr 接口与 termios 结构体,我们可以获取一个终端设备的设置信息:
操作系统可定义为一种软件,它控制计算机硬件资源,又称之为内核(kernel)。 内核的接口被称为系统调用(system call)。公用函数库在系统调用之上,应用软件既可以使用公用函数库,也可以使用系统调用。(系统调用和库函数的比较在最后)
本文介绍了Linux系统下文件锁的概念、分类、作用、相关函数以及锁的示例,让读者对文件锁有一个更深入的了解,并通过实例讲解了如何施加和释放文件锁。
一、sigqueue函数 功能:新的发送信号系统调用,主要是针对实时信号提出的支持信号带有参数,与函数sigaction()配合使用。 原型:int sigqueue(pid_t pid, int s
该文介绍了Linux系统下进程的创建、进程的终止、以及终止进程可能产生的后果。另外,还介绍了Linux系统下fork函数的使用,以及和vfork函数之间的区别。
最近使用 github 上传、下载项目代码时,经常会卡很久,有时候在命令行打了 git push 然后就去上厕所了,结果等我回来的时候,发现 push 早已经失败了,还得重新提交一下。如果有一个工具,可以不停的重启失败的 git push 直到它成功才退出,那就好了。
很多同学接触linux不多,对linux平台的开发更是一无所知。 而现在的趋势越来越表明,作为一个优秀的软件开发人员,或计算机it行业从业人员,=""
就如同刚才说的,很多同学以前可能连Linux是什么都不知道,对UNIX更是一无所知。 所以我们从最基础的讲起,对于Linux及UNIX的历史我们不做多谈,直接进入入门的学习。
这个项目其实在很早之前就开始了,最初的目的是为它(Future3D)而准备的,因此最近一段时间利用晚上下班的时间以及周末的时间在完成,故很少更文。
一、kill, raise, killpg 函数 int kill(pid_t pid, int sig); int raise(int sig); int killpg(int pgrp,
该文介绍了如何在Linux系统中通过fork函数创建守护进程,并给出了具体的示例代码。同时,文章还介绍了守护进程的一些常见用途,如保证程序在后台运行、处理控制台输入输出等。
该文总结了如何通过修改配置文件实现一个自定义的HTTPS后端服务器,包括配置HTTPS证书、指定监听端口、指定代理路径和实现基于HTTP的负载均衡。
众所周知,main 函数为 unix like 系统上可执行文件的"入口",然而这个入口并不是指链接器设置的程序起始地址,后者通常是一个启动例程,它从内核取得命令行参数和环境变量值后,为调用 main 函数做好安排。main 函数原型为:
apue 最后两章都是通过一个完整的实例来解释一些 linux 功能,第20章就是通过一个数据库实例来解释文件锁的使用,
标准 IO 库自 1975 年诞生以来,至今接近 50 年了,令人惊讶的是,这期间只对它做了非常小的修改。除了耳熟能详的 printf/scanf,回过头来对它做个全方位的审视,看看到底优秀在哪里。
今天这一节严格意义上其实不能算一个章节而应该是一个番外篇。因为通过前面翔实而又丰富的内容中,我认为大家已经具备了可以理解[ 同步、异步、阻塞、非阻塞 ]的条件了。这TM四个名词不仅每个单拎出来恶心人,而且TA们之间还会相互组合产生四个更让人恶心的名词:
Figure 20.3. Create a database and write three records to it
本文介绍了Linux信号处理的基础知识,包括信号的来源、信号的发送与接收、信号的默认处理、信号的捕捉和处理、信号的屏蔽与解除、以及多线程环境中信号的处理方法。
一、exec替换进程映象 在进程的创建上Unix采用了一个独特的方法,它将进程创建与加载一个新进程映象分离。这样的好处是有更多的余地对两种操作进行管理。当我们创建 了一个进程之后,通常将子进程替换成新
文章首发于本人CSDN账号:https://blog.csdn.net/tefuirnever
我也经常被咨询Linux C++后台开发的学习路线。然而当谈到Linux C++后台开发时,无论Linux还是C++都是一个很大的话题,聪明的程序员需要学会做减法
我们在编写一个C语言程序的时候,经常会遇到好多重复或常用的部分,如果每次都重新编写固然是可以的,不过那样会大大降低工作效率,并且影响代码的可读性,更不利于后期的代码维护。我们可以把他们制作成相应的功能函数,使用时直接调用就会很方便,还可以进行后期的功能升级。
在UNIX环境高级编程(APUE)中提到了守护进程的创建方法,思路很清晰,所以这里通过代码具体研究下。
在学校的时候泛泛读过一遍 apue,其中的部分知识只是有个大概印象,其实我个人对底层技术还是有热情和追求的 哈哈,打算把经典的书籍结合遇到的场景重读一遍,先拿 Linux 文件系统练习下。代码参考的是Linux早期的代码,没有现代内核的高级特性,VFS这部分只有介绍。
该文介绍了Linux系统下文件描述符和I/O重定向的相关内容。首先介绍了文件描述符和I/O重定向的基本概念,然后通过示例程序讲解了如何使用文件描述符和I/O重定向来实现文件的复制、打开、关闭和重定向。最后介绍了如何使用fcntl函数来实现更复杂的文件操作。
本章需要熟练掌握如下几个函数fork,exec族,_exit,wait,waitpid
在处理文件系统路径的时候,我们一般会先开辟一块内存区,用来接收路径、或者拼接好路径传递给系统调用。这是因为路径在各个系统上都有最大长度限制,在 Windows 上这个值是 MAX_PATH,一般不能超过 260;在 Linux 上这个值是 PATH_MAX,一般不能超过 4096 (或者通过 pathconf (_PC_PATH_MAX, ...) 来获取,但是一般也是 4096),就像下面这段典型的代码:
一、总结 在写之前,先唠几句,《UNIX环境高级编程》,简称APUE,这本书简直是本神书,像我这种小白,基本上每看完一章都是“哇”这种很吃惊的表情。其实大概三年前,那会大三,我就买了这本书,也看过一些,但好像没有留下什么印象,今天再看,依然觉得像新的一样。很大的原因我想是一直以来都在用windows(用windows做开发为什么学不到真正的技术,我想大家都懂的),当然知识结构不完整,学习能力这些就不说了。所以,对于那些致力于想在Linux下做开发的人来说,这本说一定是强推的。 如果你分得清write
以课本132-134页程序4-22为参考,在此基础上进行修改和扩展,实现目录树的遍历,具体需要根据传入参数的不同实现以下功能:
在写《[apue] 进程控制那些事儿》/"进程创建"/"更改进程用户 ID 和组 ID"一节时,发现 setreuid 更新实际用户 ID (RUID) 或有效用户 ID (EUID) 时,保存的设置用户 ID (saved set-user-id SUID) 只会随 EUID 变更,并不像 man 上说的会随 RUID 变更 (man setreuid):
之前在写 apue 系列的时候,曾经对系统接口的很多行为产生过好奇,当时就想研究下对应的源码,但是苦于 linux 源码过于庞杂,千头万绪不知从何开启,就一直拖了下来。
func的值可以是: (1)SIG_IGN–忽略 (2)SIG_DFL–系统默认动作 (3)调用的函数地址–信号处理程序
真的是万万没想到,我竟然真的沦落到了用【XXX手把手教你XXX】当标题的一天...
unix 的文件类型(包含在st_mode中) 1> 普通文件,包含了某种类型的数据,可以是二进制的也可以是文本 2>目录文件,目录文件时包含了其他文件的文件名和链接的文件。 3>字符设备文件,对文件的读写以字符为单位的,没有缓冲区 4>块设备文件,对文件的读写以某个大小的块为单位,有缓冲区,写入与读出都是从缓冲区的读写 5>FIFO文件 也就是命名管道文件 6>符号连结:指向另一个文件的文件
大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说link怎么连接[tp-link默认密码],希望能够帮助大家进步!!!
C++,相对别的语言学习门槛会高一点,主要原因是学习路线不明确,没有像Java那么多资料。但「在大厂里」C++岗位不比java少多少。想介绍下自己学习C++的路线,以及自己的看书方式,供参考。Cpper雄起!!!
这样的文章相信大家都见得不少了,写之前也非常忐忑,能不能和其它人写得不一样, 也定下了一个目标,这篇文章,不能是简单的堆砌学习资源和书单推荐,更要细化如何有效的去执行落地。
一、信号在内核中的表示 实际执行信号的处理动作称为信号递达(Delivery),信号从产生到递达之间的状态,称为信号未决(Pending)。进程可以选择阻塞(Block)某个信号,SIGKILL 和
有三个函数用于正常终止一个程序:_exit和_Exit立即进入内核,exit则先执行一些清理程序(关闭io等),然后进入内核。
linux 上普通文件的大小与占用空间是两个概念,前者表示文件中数据的长度,后者表示数据占用的磁盘空间,通常后者大于前者,因为需要一些额外的空间用来记录文件的某些统计信息或附加信息、以及切分为块的数据信息 (通常不会占用太多)。文件占用空间也可以小于文件尺寸,此时文件内部就存在空洞了。
一个程序内存分配: 下图是APUE中的一个典型C内存空间分布图(虚拟内存) 例如: #include int g1=0, g2=0, g3=0; int max(int i) { int m1
Key既可以是ftok返回值,也可以是IPC_PRIVATE Size以字节为单位指定内存区大小
首先是我这两天看了一些三国演义,我决定学习罗贯中大爷那种给章节起名的方式,你们先xue微感受一下,如果觉得不好恶心想吐,那么你们都给我忍着!!!
终端IO有两种不同的工作模式: (1)规范模式输入处理。终端输入以行为单位进行处理 (2)非规范模式输入处理。输入字符不组成行
领取专属 10元无门槛券
手把手带您无忧上云