![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux学习笔记
文章平均质量分 60
做自己就好
我就是我
展开
-
linux 环境变量相关的库函数学习
1. 打印系统中的所有环境变量的值。系统中有一个二维指针变量environ,它指向一个数组指针,这个数组指针里面的每个元素都是指向一个环境变量的指针。#include extern char **environ;int main(int argc, char **argv[]){ while (*environ) { printf("%原创 2013-10-26 12:18:09 · 718 阅读 · 0 评论 -
linux动态链接库的应用学习
linux系统下分为两种类型的函数库:1. 静态库静态库的链接工作是在程序编译阶段完成的。每个需要调用该静态库的程序中都有一份该库的拷贝,所以静态库在程序中的绝对位置在编译阶段就确定下来了;由于多个程序中同时有多份静态库的拷贝,所以增大了程序的大小。2. 动态链接库动态链接库在程序编译阶段不会被拷贝到程序中。它是程序在运行阶段需要调用库时才去将函数库链接到可执行程序原创 2014-01-04 17:36:05 · 602 阅读 · 0 评论 -
linux系统下的空文件
sh-3.2# ls -lh /dev/nullcrw-r--r-- 1 root root 1, 3 Dec 18 05:25 /dev/nullsh-3.2#sh-3.2# ls -lhi /dev/zero417 crw-r--r-- 1 root root 1, 5 Dec 18 05:25 /dev/zerosh-3.2#如何创建一个空文件?1. 利用/dev原创 2013-12-20 18:14:51 · 403 阅读 · 0 评论 -
linux内核模块学习
模块是具有独立功能的程序,它能被单独编译,但不能独立运行。它可以在系统运行时动态的被链接到内核中作为内核的一部分在内核空间运行,所以内核模块提高了内核的可扩展性。查看当前系统中已经加载了哪些模块的方法是:1. 使用lsmod命令进行查看,sh-3.2# lsmod2. 直接查看/proc文件系统中的信息,sh-3.2# cat /proc/modules以上两种方法原创 2014-01-03 18:18:18 · 392 阅读 · 0 评论 -
linux文件系统inode及相关学习
文件系统中最大可容纳的文件个数是有限的,那受何限制呢?linux文件系统分为inode区和block区,其中inode用来存储文件的属性信息,block区用来存储文件的实际内容。所以实际影响文件系统中inode个数的因素有两个:一个是文件系统inode的数量;一个是block区的大小。sh-3.2# touch /tmp/ooxxsh-3.2# ls -lh /tmp/原创 2013-12-17 18:22:09 · 416 阅读 · 0 评论 -
linux signal相关函数学习
pause系统调用用来暂停程序的执行,直到信号的出现。这个信号可以是用来结束进程的信号或者是进程要捕捉的信号。#include int pause(void);sleep函数用来暂停当前CPU的执行,#include unsigned int sleep(unsigned int seconds);signal系统调用用来捕捉一个指定的信号(几个不可捕捉的信号除外),原创 2013-12-30 20:31:45 · 288 阅读 · 0 评论 -
关于二进制文件的学习
广义上讲,无论是文本文件抑或是其它编码方式编码后的二进制文件都可认为是二进制文件。这是因为任何数据在计算机上的存储都是以二进制格式存储的。狭义的二进制文件是指除文本文件以外的文件。一般来讲,如果文件中的每个字节的内容都可以表示成字符的数据,那么这个文件就被认为是文本文件。所以也可以认为ASCII文件是二进制文件的一种特例。通常人们对ASCII文件是比较敏感的,对于二进制文件是很原创 2013-12-16 18:09:22 · 340 阅读 · 0 评论 -
linux系统文件扩展名学习
linux系统下的扩展名并不能标识该文件是属于哪一种类型的文件。文件是否可以执行等都跟文件的扩展名无关。因为文件script没有执行权限,所以也就无法执行,sh-3.2# touch ./scriptsh-3.2# ls -lh ./script-rw-r--r-- 1 root root 0 Dec 28 06:15 ./scriptsh-3.2#sh-3.2# ./原创 2013-12-28 14:38:44 · 333 阅读 · 0 评论 -
linux exit函数学习
exit是一个库函数,在进程正常结束时调用,#include void exit(int status);_exit是一个系统调用,用来终止一个进程,#include void _exit(int status);exit与_exit都是用来正常退出进程,二者区别在于:exit库函数会先检查进程打开文件的状况,并且负责把文件缓冲区中的内容写回到文件中;而_exit系原创 2013-12-28 16:14:22 · 378 阅读 · 0 评论 -
linux系统中档案的modify time和change time的理解和学习
先看一下,档案的属性中有三个时间:access time,modify time以及change time。其中access time很好理解,但是modify time和change time这两个时间却困惑了我好久。所以还是决定查资料学习,否则睡不着觉。1. 刚创建文件时,access time、modify time和change time是相同的。sh-3.2# cp /e原创 2013-12-12 18:29:10 · 1135 阅读 · 1 评论 -
linux shell提示符学习
有时候看到的shell提示符是:"sh-3.2#";有时候看到的shell提示符是:"$";还有时候看到的shell提示符是:"[~]$";还有很多其它不同样子的shell提示符。为什么会这样呢?这跟shell提示符符号设定的环境变量PS1(prompt sign)的设定值有关,可以通过man bash来查看一些特殊符号所代表的意义。sh-3.2# echo $PS1原创 2013-12-10 18:36:05 · 377 阅读 · 0 评论 -
linux runlevel学习
linux系统中的run level就像windows系统中的Normal mode、safe mode和command prompt only mode一样;不同的run level会启动不同的服务。linux系统开机时init进程会去读取/etc/inittab,从中读出系统默认的run level,根据run level的值来决定启动对应的服务。比如默认的run level是3,原创 2013-12-06 18:28:00 · 410 阅读 · 0 评论 -
linux rc.local学习
linux系统开机流程:1. run_init_process("init_process");2. sh /etc/inittab读系统预设的run level并根据不同的run level选择执行不同的服务;...sh-# ls -d /etc/rc*/etc/rc0.d /etc/rc1.d /etc/rc2.d /etc/rc3.d /etc/rc4.d /etc/原创 2013-11-28 18:03:55 · 411 阅读 · 0 评论 -
linux网络相关问题的基本排查方法
在做linux网络应用中,可能经常会遇到download或upload等失败的时候。那遇到这类问题时,该如何去入手查找问题点呢?下面是结合自己学习过程中总结的一些分析问题的方法,将其记录下来,以备将来需要时可以翻出来看一看。 1. 如果网络不通,先用ifconfig检查系统是否正确识别到网络接口(即网卡),sh-# ifconfigeth0 Link enca原创 2013-09-10 15:35:08 · 931 阅读 · 0 评论 -
linux shell之波浪号扩展
在linux shell下面,~和当前user的home目录是等效的,在linux shell下,波浪号总是被自动扩展成当前user的home目录。sh-# echo $HOME/sh-# mkdir /my_homesh-# export HOME=/my_home/sh-# echo $HOME/my_home/sh-# cd ~sh-# pwd/my_原创 2013-09-09 11:26:55 · 1021 阅读 · 0 评论 -
linux socket学习
linux socket可以用来作为进程间通信的一种方法,特别是在网络通信中应用于C/S模式。跟socket应用相关的系统调用有:#include #include int socket(int domain, int type, int protocol);其中参数domain用来指定一个具体的域,比如AF_LOCAL、AF_INET、AF_INET6、AF_NETL原创 2014-01-05 16:45:09 · 402 阅读 · 0 评论 -
进程结束处理函数
进程结束的方式有:1. 进程正常结束;2. 进程非正常结束。如果是正常结束,可以通过atexit函数来注册callback函数,这样进程正常结束时就会调用这个注册的函数。#include int atexit(void (*function)(void));如果进程非正常结束,那么只要父进程使用sigaction函数去监控了SIGCHLD信号,那么当子进程意外结束时原创 2013-12-20 19:49:10 · 406 阅读 · 0 评论 -
linux系统crash问题练习五:空指针访问
测试代码如下:case1:#include static void _null_pointer_test(void){ char *ps_str = 0; *ps_str = 'o'; return;}int main(int argc, char *argv[]){ _null_pointer_test(原创 2013-11-16 11:47:19 · 1374 阅读 · 0 评论 -
linux IPC机制之msg q学习
回顾一下,linux系统的IPC机制有:pipe/FIFO/signal/temp file/semaphore/shared memeory以及message queue等。本文要讲的是其中的一种IPC机制:message queue。message queue就是两个进程之间创建的一个消息队列用于发送和接受消息。发送者和接收者通过message queue通信时,无需同时运行。原创 2014-04-08 18:12:10 · 536 阅读 · 0 评论 -
linux pthread学习
在应用程序编程中,为了不影响与用户交互的性能,通常需要创建新的线程来处理一些比较耗时的、不影响用户体验的工作。而这又通常分为两种情况:(1)需要临时创建一个线程来做某件特定的事,等事情做完时线程即可销毁;(2)需要创建一个固定的线程一直监控某件事的发生。pthread是一个遵守POSIX标准的线程库,我们可以使用pthread来轻松的完成我们的需求。虽然pthread是遵守PO原创 2013-09-11 18:32:03 · 780 阅读 · 0 评论 -
linux内存布局学习
linux系统中的进程总是以为自己是唯一的,那进程是如何被映射到内存中的呢?接上一篇的学习,那代码段、数据段、堆、栈它们在内存中是如何分布的呢?http://blog.csdn.net/boyxulin1986/article/details/21548625以前总是觉得这些东西太高深,可望而不可及;从现在开始,让我们慢慢揭开这神秘的面纱。典型的linux C程序内存布局,从低原创 2014-03-22 11:24:14 · 579 阅读 · 0 评论 -
同样的source code,为什么strip symbol跟not strip symbol编译出来的目标文件的大小会差很大?
接上一篇的学习,http://blog.csdn.net/boyxulin1986/article/details/21788873为什么最终编译出来的目标文件的大小会差很多?1. 使用strip命令可以将debug symbol从目标文件(.o/.so/.ko或者是可执行文件)中去除掉。使用同一份源文件,编译两份目标文件出来:一份是使用strip去除debug符号的目标文件s原创 2014-03-22 17:29:40 · 1006 阅读 · 0 评论 -
关于条件变量的学习
条件变量是利用线程间共享的全局变量进行同步的一种机制,主要包括两个动作:一个线程等待"田间变量的条件成立"而挂起;另一个线程使"条件成立"。条件变量通常是和互斥锁一起使用。如果一个条件为假,一个线程自动阻塞,并释放等待状态改变的互斥锁;如果另一个线程改变了条件,它发信号给关联的条件变量,唤醒一个或多个等待它的线程,重新获得互斥锁,重新评价条件。条件变量通常用于线程间的同原创 2014-04-17 18:15:35 · 399 阅读 · 0 评论 -
linux守护进程学习
守护进程是工作在后台的程序,是用户"看不见"的进程,它们会在后台偷偷的运行着。守护进程是不需要和控制台进行通信的,所以可以将标准输入、标准输出以及标准出错都关掉。如何关掉呢?调用库函数daemon就能达到这一需求,#include int daemon(int nochdir, int noclose);在daemon函数内部,它会将stdin、stdout以及stderr原创 2013-12-27 20:36:17 · 302 阅读 · 0 评论 -
linux delay write学习
以下几个系统调用用来将buffer中的数据写回到磁盘中。其中:系统调用sync先将数据写到buffer,再从buffer写回磁盘中;它是异步调用,函数返回但I/O操作可能未完成。fsync系统调用会将metadata和数据区数据都写回到磁盘中;它是同步调用,函数返回时I/O操作即完成。fdatasync只是将数据区数据写回磁盘中,metadata不会写回磁盘。#incl原创 2013-12-26 20:08:43 · 468 阅读 · 0 评论 -
关于查内存泄漏工具mtrace的学习
mtrace是glibc库提供的一种检查内存泄漏的方法,所以特别重要的是你的程序是基于glibc之上的程序。mtrace的原理是通过记录glibc中每一对malloc-free的执行,来判断是否存在内存泄漏问题。所以如果你的程序不是基于glibc函数库的程序,那即使存在内存泄漏,mtrace也无法帮助查找系统中的内存泄漏问题。所以像C++语言中的通过new/delete运算原创 2014-01-09 20:13:48 · 646 阅读 · 0 评论 -
linux FIFO学习
FIFO,又称作命名管道(named pipe),它是Linux系统中用于进程间通信的一种方法。FIFO和pipe的区别在于:FIFO在文件系统中有对应的inode,可以通过ls命令查看。sh-3.2# ls -lhF ./fifo_file100 prwxrwxrwx 1 root root 0 Jan 1 1970 ./fifo_file|sh-3.2#正因为它有一原创 2013-12-24 18:08:13 · 568 阅读 · 0 评论 -
linux pipe学习
pipe用于在具有血缘关系的进程之间的通信。pipe单独构成一种独立的文件系统,对于管道两端的进程而言,它就是一个文件,但它不是普通的文件;管道不属于现有的某个文件系统,它单独构成一种文件系统,存在于内存中;除了对具有血缘关系的进程外,管道对于其它的进程是不可见的。使用pipe系统调用可以用来创建一个管道,#include int pipe(int pipefd[2]);原创 2013-12-24 18:09:40 · 671 阅读 · 0 评论 -
库函数与系统调用学习
1. glibcglibc是GNU发布的libc库,glibc是linux系统最底层的API,几乎其它任何运行库都会依赖于glibc。glibc除了封装linux系统所提供的系统服务外,它本身也提供了许多其它一些必要功能服务的实现。2. 库函数库函数一般是指编译器提供的可在C源程序中调用的函数,分为两类:一个是C语言标准规定的库函数;一个是编译器特定的库函数。c语言的库原创 2014-01-07 18:43:51 · 388 阅读 · 0 评论 -
linux系统下的帐号管理学习
linux是多用户操作系统,每一个用户在系统上都有一个唯一的id,这个id就是UID。sh-3.2# iduid=0(root) gid=0(root)sh-3.2#id是一个数字,用户很难去记得一个数字到底对应的是哪个用户。所以可以给每个用户分配一个用户名,这个用户名是用户敏感的。用户名和UID的对应关系可以通过查看/etc/passwd知道,sh-3.2# cat原创 2014-01-06 12:26:25 · 342 阅读 · 0 评论 -
linux系统日志学习
日志文件是linux系统管理员管理系统、解决问题的重要依据。如果要查看linux系统开机日志信息,可以使用dmesg命令或直接查看/proc/kmsg信息。/proc/kmsg文件用来存储用printk生成的内核消息,只有超级用户权限的进程可以读取这个文件。linux kernel默认的日志级别是几?如果将printk的日志级别设为最低(KERN_EMERG),减少kernel启动原创 2013-12-21 16:04:35 · 765 阅读 · 0 评论 -
linux系统crash问题练习四:栈溢出
从ulimit的结果知道,系统设定的stack size为8192kbytes,sh-# ulimit -acore file size (blocks, -c) 0data seg size (kbytes, -d) unlimitedscheduling priority (-e) 0file size原创 2013-11-08 18:11:39 · 634 阅读 · 0 评论 -
linux系统crash问题练习三:踩函数的返回地址
测试程序:#include static unsigned char str_init[100] = "this is initialized string.";static void _copy_string(void){ char s_dest[10] = {0}; strcpy(s_dest, str_init); printf("\原创 2013-11-08 18:10:06 · 791 阅读 · 0 评论 -
linux编译和运行一个可执行文件学习
在大公司上班,系统中的模块都有明确的分工,一直以来也只是熟悉自己负责的那一点点东西,感觉就是井底之蛙。所以希望自己能够静下心来,学一点,多学一点。本篇作为一个学习的起点,先学习如何编译和运行一个可执行文件。测试代码如下:#include int main(int argc, char* argv[]){ int i = 0; for (;i {原创 2013-10-01 13:59:18 · 743 阅读 · 0 评论 -
关于NTP的学习
NTP是Network Time Protocol的简称,即网络时间协议,其作用是周期性的同步计算机的时间。而之所以需要周期性的去同步计算机时间,是因为计算机本身的时间并不准确。linux系统NTP的配置文件是/etc/ntp.conf。使用ps -A | grep ntp可以看到有一个ntp的守护进程ntpd一直在运行,它会周期性的来同步时间。你也可以看到在/etc/cr原创 2013-10-22 20:16:09 · 620 阅读 · 0 评论 -
IPv4基础知识学习
因为做网络应用程序开发,感觉很多比较基础的网络知识还是要了解一点才会更加有助于提高开发效率。所以还是要坚持着学习一下了。IPv4是Internet Protocol version 4的简称。IPv4地址按用途划分,分为:1. A类,一个A类IP地址由一个字节的网络地址和三个字节的主机地址组成,并且网络地址的最高位固定为0,其地址范围是1.0.0.1~126.255.255原创 2013-10-28 12:45:33 · 641 阅读 · 0 评论 -
linux fork系统调用的学习
fork()系统调用简单的来讲就是创建一个新的进程。 #include pid_t pid = 0; pid = fork();switch (pid){ /* child process */ case 0: { printf("\nchild process\n"); exit(0);原创 2013-09-02 12:09:19 · 451 阅读 · 0 评论 -
linux文件系统学习
linux系统支持很多种文件系统。1. 如何确认当前系统挂载了哪些文件系统?使用mount命令可以查看当前系统上已经挂载了哪些文件系统,sh-# mountrootfs on / type rootfs (rw)none on /proc type proc (rw,relatime)none on /sys type sysfs (rw,relatime)none o原创 2013-09-27 18:09:43 · 1225 阅读 · 0 评论 -
linux文件系统之tmpfs学习
关于文件系统,我们在下面的博文中已有做简单的介绍,http://blog.csdn.net/boyxulin1986/article/details/12107113本篇博文我们学习的是文件系统中的tmpfs。tmpfs是一种伪文件系统,它是从DRAM中创建出来的,相比于磁盘而言,其具有更高的访问效率。如何创建一个tmpfs?第一步先配置/etc/fstab,新增加一栏tm原创 2013-09-28 14:36:48 · 966 阅读 · 0 评论 -
linux系统的文件类型学习
linux是一个文件型操作系统,在linux下一切皆文件。目录、字符设备、块设备、管道、套接字、符号连接文件等在linux下统统都是文件。linux下的文件类型分为以下几种类型:1. 正规文件,2. 目录,3. 字符设备,4. 块设备,5. 套接字文件,6. 管道,7. 符号链接文件。目前我知道有两种方法查看文件类型:1. 使用ls -l进行查看,2原创 2013-10-12 18:09:13 · 624 阅读 · 0 评论