linux
文章平均质量分 59
epsilon1
这个作者很懒,什么都没留下…
展开
-
Linux--Advance getenv的非可重入版本
这里我们将 getenv 获取的环境变量写入全局变量中,所以这个版本不是可重入的。下面是测试代码:#include #include #include #include #include #include #define ARG_MAX 100static char envbuf[ARG_MAX];extern char **environ;//用于输出环境变量/原创 2015-11-22 10:09:40 · 555 阅读 · 0 评论 -
Linux Advance--设备特殊文件
每个文件系统所在的存储设备都由其主、次设备号表示,设备号所用的数据类型是基本系统数据类型 dev_t 。主设备号标识设备驱动程序,次设备号标识特定的子设备。通常使用两个宏 major 和 minor 来访问主、次设备。#include #include #include #include int main(int argc, char *argv[]){ int i;原创 2015-11-23 22:31:35 · 464 阅读 · 0 评论 -
Linux Advance--打印文件类型
文件相关的信息存放在结构体 stat 中:struct stat { mode_t st_mode; /* file type & mode (permissions) */ ino_t st_ino; /* i-node number (serial number) */ dev_t st_dev; /* device number (file system) */ dev原创 2015-11-23 18:32:12 · 499 阅读 · 0 评论 -
Linux Advance--从一道题谈linux下fork的运行机制
首先上代码:#include #include int main(){ pid_t p1, p2; p1 = fork(); p2 = fork(); printf("pid1:%d, pid2:%d\n", p1, p2);} 要求如下: 已知从这个程序执行到这个程序的所有进程结束这个时间段内,没有其它新进程执行。原创 2015-11-19 21:54:35 · 559 阅读 · 0 评论 -
Linux Advance--打印标准IO流缓冲状态信息
在打印缓冲状态信息之前,先对每个流执行IO操作,第一个IO操作通常就造成为该流分配缓冲。结构成员 _IO_file_flags,_IO_buf_base,_IO_buf_end 和常量 _IO_UNBUFFERED, _IO_LINE_BUFFERED 是由Linux中的GNU标准IO库定义的。#include void pr_stdio(const char *, FILE *)原创 2015-11-24 22:38:49 · 551 阅读 · 0 评论 -
vim下接下Ctrl+S造成程序僵死
在windows下面编辑文件总习惯按 Ctrl + S,于是XShell远程连接Linux 用Vim编辑文件保存时也偶尔会按 Ctrl + S,但是按完了之后XShell 编辑界面没反应了,而按键盘时指示箭头在闪,说明按键响应了,只是屏幕没有显示。后来查了一下,发现 远程连接工具 Ctrl + S是锁定屏幕,相应的 Ctrl + Q 是解锁屏幕。原创 2015-12-12 20:27:32 · 614 阅读 · 0 评论 -
codeblocks 多线程编程时出现:对pthread_create未定义的引用,解决方法
程序已经添加了#include头文件,但编译却提示:对‘pthread_create’未定义的引用由于pthread库不是Linux系统默认的库,连接时需要使用库libpthread.a,所以在使用pthread_create创建线程时,在编译中要加-lpthread参数:gcc pthread.c -lpthread -o pthread下面是code原创 2015-11-20 00:00:21 · 15210 阅读 · 1 评论 -
怎样修复grub开机引导
很多时候,特别是在linux调整分区后,开机重启时会出现 error : unknow filesystem grub rescue> 的字样,系统就是进不去。这表示你的grub2的配置文件坏了 由于分区调整或分区UUID改变造成grub2不能正常启动,从而进入修复模式了(grub rescue),也称救援模式。原创 2015-12-13 18:53:46 · 2806 阅读 · 0 评论 -
Linux Advance--线程清理处理函数
线程可以安排它退出时需要调用的函数,这与进程可以用atexit函数安排进程退出时需要调用的函数是类似的。这样的函数称为线程清理处理程序 (thread cleanup handler) 。线程可以建立多个清理处理程序。处理程序记录在栈中,也就是说它们的执行顺序与它们注册时的顺序相反。函数原型声明如下:#include void pthread_cleanup_push(void (*r原创 2015-11-20 15:10:48 · 534 阅读 · 0 评论 -
Linux 信号量同步实验
题目:有一个盘子,父亲放入苹果,母亲放入桔子,女儿取出苹果,儿子取出桔子。同步关系:父亲放苹果和女儿取苹果 && 母亲放桔子和儿子取桔子互斥关系:父亲放苹果和母亲放桔子下面是源代码:#include #include #include #include #include #include #include union semun { int va原创 2015-12-10 18:48:18 · 946 阅读 · 1 评论 -
Linux Advance--目录下文件类型统计
统计目录下的文件类型需要读目录,相关的函数声明如下:#include DIR *opendir(const char *pathname);struct dirent *readdir(DIR *dp);void rewinddir(DIR *dp);int closedir(DIR *dp);long telldir(DIR *dp);void seekdir(DIR原创 2015-11-23 21:52:49 · 441 阅读 · 0 评论 -
Linux Advance--标准I/O的效率
Linux的读写流声明如下:#include int getc(FILE *fp);int fgetc(FILE *fp);int getchar(void);int ferror(FILE *fp);int feof(FILE *fp);void clearerr(FILE *fp);int ungetc(int c, FILE *fp);int putc(int c原创 2015-11-24 15:31:39 · 615 阅读 · 0 评论 -
Linux Advance--可重入的getenv
要使 getenv_r 可重入,需要改变接口,调用者必须自己提供缓冲区,这样每个线程可以使用各自不同的缓冲区从而避免其他线程的干扰。但是注意这还不足以使 getenv_r 成为线程安全的,要使 getenv_r 成为线程安全的, 需要在搜索请求的字符串时保护环境不被修改。我们可以使用互斥量,通过 getenv_r 和 putenv 函数对环境列表的访问进行序列化。#include #原创 2015-11-22 10:48:12 · 742 阅读 · 1 评论 -
Linux Advance--线程和fork
当线程调用 fork 时,就为子进程创建了整个进程地址空间的副本。子进程通过继承整个地址空间的副本,也从父进程那里继承了所有互斥量、读写锁和条件变量的状态。如果父进程包含多个进程,子进程在 fork 返回之后,如果紧接着不是马上调用 exec 的话,就需要清理锁状态。要清除锁状态,可以通过调用pthread_atfork 函数建立 fork 处理程序。#include int pt原创 2015-11-22 15:59:22 · 394 阅读 · 0 评论 -
Linux Advance--守护进程
在linux或者unix操作系统中在系统引导的时候会开启很多服务,这些服务就叫做守护进程。为了增加灵活性,root可以选择系统开启的模式,这些模式叫做运行级别,每一种运行级别以一定的方式配置系统。 守护进程是脱离于终端并且在后台运行的进程。守护进程脱离于终端是为了避免进程在执行过程中的信息在任何终端上显示并且进程也不会被任何终端所产生的终端信息所打断。简介守护进程,也就是通常说原创 2015-11-22 21:27:43 · 422 阅读 · 0 评论 -
/etc/fstab 文件解释
/etc/fstab 文件解释文件fstab包含了你的电脑上的存储设备及其文件系统的信息。它是决定一个硬盘(分区)被怎样使用或者说整合到整个系统中的唯一文件。这个文件的全路径是/etc/fstab。它只是一个文本文件,你能够用你喜欢的编辑器打开它,但是必须是root用户才能编辑它。同时fsck、mount、umount的等命令都利用该程序。具体来说:用fstab可以自动挂载原创 2015-12-09 13:10:31 · 601 阅读 · 1 评论 -
Linux可重入函数
1、可重入函数 可重入函数指的是可以被中断的函数。也就是说,可以在这个函数执行的任何时刻中断它,转入OS调度下去执行另外一段代码,而返回控制时不会出现什么错误;而不可重入的函数由于使用了一些系统资源,比如全局变量区,中断向量表等,所以它如果被中断的话,可能会出现问题,这类函数是不能运行在多任务环境下的。I/O代码通常不是可重入的,因为它们依赖于像磁盘这样共享的,单独的资源。2原创 2015-11-22 09:39:58 · 1816 阅读 · 0 评论 -
Linux Advance--同步信号处理
下面讲一个同步信号处理的程序:#include #include #include #include #include #include int quitflag;sigset_t mask;pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;pthread_cond_t wait = PTHREAD_COND_INI原创 2015-11-22 14:08:23 · 405 阅读 · 0 评论 -
Linux Advance--文件IO--创建一个具有空洞的文件
这里用到了内核的 lseek 函数:#include off_t lseek(int filedes, off_t offset, int whence);文件的空洞并不要求在磁盘上占用存储区。当定位超出文件尾端之后写时,对于新写的数据需要分配磁盘块,但是对于原文件尾端和新开始写位置之间的部分则不需要分配磁盘块。 下面是测试程序:#include #include #defi原创 2015-11-23 12:13:48 · 965 阅读 · 0 评论 -
Linux下rar 命令压缩和解压详解
例1:添加文件或目录到压缩档案中,使用a命令。例如把文件files1添加到abc.rar中,使用a或m命令,a命令把file1文件添加到abc.rar档案中保持原有的file1文件不变,m命令移动file1文件到file1.rar档案中(压缩完成后会删除原有的file1文件,注意:m命令只针对文件进行操作)$rar a abc.rar file1说明:如果此时abc.rar档案不存在,原创 2015-11-01 23:53:54 · 727 阅读 · 0 评论 -
Linux Advance--输出错误信息
最近在学习 linux 高级编程中的线程控制,因为一般情况下创建线程或者给临界资源上锁是不会出错的,我想故意返回个错误码看输出的是什么,但是终端直接抛出 “segmentation fault” 我也是很纳闷,后来发现输出错误信息调用了 strerror 函数,然后我在c++ reference 上查了一下,发现这个函数必须要引入头文件 string.h 才能用。下面是我实验的源代码:原创 2015-11-21 11:03:44 · 388 阅读 · 0 评论 -
VMware安装增强功能实现共享文件夹和剪贴板
因为学习工作的需要,经常会在虚拟机和windows主机之间传输一些文件,如果用命令或者借助ftp服务器会有点麻烦,而且不方便,本来就是自己用,没必要那么折腾,而且现在我们用的虚拟机基本上都是搭建在VMware下的,所以我们可以借助VMware自带的增强功能实现主机和虚拟机之间共享文件夹和剪贴板,下面是具体操作过程:1、打开虚拟机(我这里用的centos)安装vmware增强工具点击VMwa原创 2015-11-27 18:53:32 · 21826 阅读 · 0 评论 -
Linux hostname主机名配置及修改
这篇文章为大家介绍linux hostname主机名配置文件/etc/hosts,包括主机名的用途、配置文件的操作方法及修改主机名的步骤等,有需要的朋友,可以参考下1. 什么是Linux主机名无论在局域网还是INTERNET上,每台主机都有一个IP地址,是为了区分此台主机和彼台主机,也就是说IP地址就是主机的门牌号。但IP地址不方便记忆,所以又有了域名。域名只是在公网(Internet)中存在(以原创 2016-03-30 17:09:50 · 10501 阅读 · 0 评论 -
Linux Bash 程序题解
问题描述:设计一个程序 cuts,它由标准输入读取数据,获取由第一个参数 n 和第二个参数 m 所限定范围的数据,n 和 m 都是整数,即从输入的字符串中抽取第 n 个字符至第 m 个字符之间的所有字符(包括这两个字符)。例如:$ cuts 11 14this is a test of cuts program # 输入test # 显示结果方案一:利用bash的参数展开语法: ${para原创 2016-03-30 17:55:06 · 3201 阅读 · 0 评论 -
监控 Linux 性能的 18 个命令行工具
对于系统和网络管理员来说每天监控和调试Linux系统的性能问题是一项繁重的工作。在IT领域作为一名Linux系统的管理员工作5年后,我逐渐认识到监控和保持系统启动并运行是多么的不容易。基于此原因,我们已编写了最常使用的18个命令行工具列表,这些工具将有助于每个Linux/Unix 系统管理员的工作。这些命令行工具可以在各种Linux系统下使用,可以用于监控和查找产生性能问题的原因。这个命令行工具列原创 2016-02-28 10:40:44 · 1978 阅读 · 2 评论 -
11款最棒的Linux数据恢复工具
无论你使用的是台式电脑还是笔记本,需要关注的重点之一都是如何保护好你的宝贵数据。因为总会有各种突发情况使你的系统崩溃,然后你要做的就是恢复数据。不管你怎么想,要是我失去了所有的数据却无法恢复的话,我会分分钟肢解了这台破电脑。不过幸好的是,现在市场上有不少的数据恢复工具,能帮助我们从系统的硬盘上恢复数据。如果你使用的是Linux操作系统,那么你一定想知道一旦硬盘崩溃的话又该如何保存和恢复数据原创 2016-02-28 10:44:03 · 3905 阅读 · 1 评论 -
CSAPP Tiny web 服务器源码分析及搭建运行
CSAPP Tiny Web 服务器源码分析 运行结果1. Web基础web客户端和服务器之间的交互使用的是一个基于文本的应用级协议HTTP(超文本传输协议)。一个web客户端(即浏览器)打开一个到服务器的因特网连接,并且请求某些内容。服务器响应所请求的内容,然后关闭连接。浏览器读取这些内容,并把它显示在屏幕上。 对于web客户端和服务器而言,内容是与一个MIME类型相关的字节序列。常见的MIME类型:原创 2016-03-25 17:21:50 · 5582 阅读 · 1 评论 -
WinSetupFromUSB制作多系统U盘引导启动
重装系统有各种方式,比较常见的有做系统引导U盘、刻录PE、硬盘一键安装等。但是有很多缺点,国内大部分用的Ghost系统,内含各种捆绑软件,系统极其不安全、稳定,另外制作U盘启动也只能做一个系统的安装盘,如果想换个系统还要另外刻录,费时费力。0x00 简介WinSetupFromUSB是一款制作从usb磁盘(u盘和移动硬盘)启动安装操作系统的强大工具,支持各种windows、pe、linux操作系统。原创 2016-06-06 17:29:14 · 27014 阅读 · 2 评论 -
Linux添加swap分区
根据Redhat公司的建议,Linux系统swap分区最适合的大小是物理内存的1-2倍.不过Linux上有些软件对swap分区得需求较大,例如要顺利执行Oracle数据库软件,swap分区至少需要400MB或者物理内存2倍以上的空间.当然我们在安装Linux的时候,就能直接讲swap分区设置到足够的大小,但如果已经安装好Linux了,之后又想再安装类似Oracle的软件,却发现swap分区空间不够,原创 2016-08-07 19:44:06 · 2039 阅读 · 5 评论 -
Linux安装gcc-6.1.0
获取gcc源码包gcc各版本地址:https://ftp.gnu.org/gnu/gcc 目前最新的是6.1.0版:https://ftp.gnu.org/gnu/gcc/gcc-6.1.0/gcc-6.1.0.tar.bz2# wget https://ftp.gnu.org/gnu/gcc/gcc-6.1.0/gcc-6.1.0.tar.bz2# tar -jxvf gcc-6.1.0.ta原创 2016-08-07 20:12:31 · 9900 阅读 · 6 评论 -
Bash eval命令及其常见用法
POSIX的解释: eval - construct command by concatenating arguments先感受下面的几行命令:[root@localhost shell]# set -- one two three # 设置 $1 $2 $3[root@localhost shell]# echo $1one[root@localhost shell]# n=1[r原创 2016-03-30 13:42:29 · 9423 阅读 · 0 评论 -
Linux find命令实例解析
查找两天前修改过的文件:find . -type f -mtime -2查找3天内修改过的文件:find -ctime -3find命令使用超过6天,空文件独立查询命令:find /data/backup -ctime +6 -exec rm -f {} \; 删除/data/backup目录下修改时间超过6天的文件。 find /data/backup -t原创 2016-03-05 09:08:39 · 510 阅读 · 0 评论 -
linux硬链接和软链接的区别
1.原理上:硬链接(hard link):A是B的硬链接(A和B都是文件名),则A的目录项中的inode节点号与B的目录项中的inode节点号相同,即一个inode节点对应两个不同的文件名,两个文件名指向同一个文件,A和B对文件系统来说是完全平等的。如果删除了其中一个,对另外一个没有影响。每增加一个文件名,inode节点上的链接数增加一,每删除一个对应的文件名,inode节点上的链接数减一原创 2016-02-13 15:32:31 · 454 阅读 · 1 评论 -
Linux Advance--set_fl 和 clr_fl
Unix高级编程高级IO部分提到了两个函数,这里把实现写出来:void set_fl(int fd, int flags){ int val; if ((val = fcntl(fd, F_GETFL, 0)) < 0) { printf("fcntl F_GETFL error\n"); exit(1); } val |= flags; if (fcntl(fd,原创 2015-11-27 21:18:05 · 1192 阅读 · 0 评论 -
Linux环境变量修复
上次因为配置环境变量,不小心在 /etc/profile 里面修改了 PATH,导致以前的 PATH丢失。结果是显然的,sudo vim 等等各种不能运行。修复方法如下:export PATH=/bin:/sbin:/usr/bin:/usr/sbin在终端下运行上述命令,然后修改 /etc/profile,在 export PATH=... 这句话的等号后面加上 $PATH: 完整的比如原创 2015-12-15 20:44:42 · 1423 阅读 · 0 评论 -
Ubuntu查看内核版本和发行版本
1、查看内核版本uname -r#仅显示内核版本uname -a#显示内核详细信息2、查看发行版本cat /etc/issue#仅显示发行版本lsb_release -r#仅显示发行版本号lsb_release -a#显示发行版本详细信息原创 2015-12-15 22:01:15 · 698 阅读 · 0 评论 -
Linux Shell 1>/dev/null 2>&1 &
/dev/null :代表空设备文件> :代表重定向到哪里,例如:echo "123" > /home/123.txt1 :表示stdout标准输出,系统默认值是1,所以">/dev/null"等同于"1>/dev/null"2 :表示stderr标准错误& :表示等同于的意思,2>&1,表示2的输出重定向等同于1,最后一个是后台运行的意思1 > /dev/null原创 2016-01-03 10:25:13 · 528 阅读 · 0 评论 -
VMware NAT模式虚拟机和主机互ping
以下教程解决 虚拟机 和 windows主机 在NAT网络连接模式下不能互ping的问题:首先虚拟机可以联网,可以ping通百度,但是无法ping通NAT网关。这是vmnet8 ip设置的问题:设置好以后在cmd下ipconfig查看vmnet8的ip:改好以后虚拟机和主机可以ping通。原创 2015-12-18 16:27:27 · 3650 阅读 · 0 评论 -
Ubuntu 添加新分区 并设置挂载点
最近在做Android项目,可是解压根文件系统以后,就报警说硬盘不够。当初设置使用的大小为15G。不过扩展分区还是很方便的。当然首先你得设置添加使用的硬盘大小,这次我一下提高到了30G,看它还报警否。一、创建新分区首先查看已经有的分区:root@ubuntu:/# fdisk -lDisk /dev/sda: 32.2 GB, 32212254720 bytes255转载 2015-12-09 13:15:01 · 2444 阅读 · 0 评论 -
Linux Bash Shell $*和$@的区别
在 Linux Bash Shell 中,$* 和 $@ 都表示参数列表中的所有参数,它们在具体使用中会有哪些不同呢?这里我们可以写一个 Shell 脚本做实验:#!/bin/bash# This script is to verify the difference between $* and $@echo Dollar Star is $*echo "Dollar Star in原创 2016-01-11 20:56:22 · 2043 阅读 · 0 评论