
Unix环境高级编程
文章平均质量分 88
轮子学长
这个作者很懒,什么都没留下…
展开
-
kill与kill -9的区别
有时候我们使用kill无法杀掉一个进程,但是用kill -9却可以,why? 首先看一下kill的功能,man手册对kill描述如下:KILL(1) Linux User's Manual KILL(1)NAME原创 2014-12-09 10:17:20 · 7314 阅读 · 0 评论 -
APUE学习笔记——10信号——信号接口函数 signal 和 sigaction
signal函数是早起Unix系统的信号接口,早期系统中提供不可靠的信号机制。 信号有三种处理方式,1)忽略,此时func赋值为SIG_IGN; 2)使用默认动作,此时func赋值为SIG_DFL; 3)自定义动作,此时func赋值为我们自定义函数的函数指针,会调用到信号处理程序(signal handler)或信号捕捉函数(signal-catching function)。使用fork创建子进程时,子进程会继承父进程的信号状态。Note:用户定义的信号捕捉函数的的地址在子进程时有效的。 使用ex原创 2014-09-01 09:56:56 · 1966 阅读 · 0 评论 -
APUE学习笔记——6 系统数据文件与信息
用户口令:/etc/passwd文件 getpwuid函数由ls(1)程序使用,它将i节点中的数值用户id映射为用户登录名。在键入登录名时,getpwnam函数由login(1)程序使用。阴影口令/etc/shadow 仅有login和password等少数几个程序需要用到加密口令的存取。阴影口令使用结构体:(该结构体中只有用户名和加密口令是必须的,其他的只是用户控制账户时间信息)组文件/etc/group原创 2014-08-28 10:22:20 · 1011 阅读 · 0 评论 -
APUE学习笔记——6.10 时间与时间例程 time_t
Unix提供的最基本的时间服务室日历时间(纪元时间),也就是计算1970年1月1日0时0分0秒到当前的秒数。该秒数用time_t表示。typedef long time_t; /* 时间值time_t 为长整型的别名*/Unix/Linux提供了微秒级别获取和设置时间的函数gettimeofday()与settimeofday(),但根据man手册的描述,这两个函数已经过时,此处不做介绍。仅列出原型(这两个函数编译需要glibc的支持)夏时制,夏时令(Daylight Saving Time原创 2014-08-28 14:50:01 · 1700 阅读 · 0 评论 -
APUE学习笔记——10 信号
信号的基本概念 用sigaction代替signal 可靠信号与不可靠信号 现在大部分Unix系系统如Linux都已经实现可靠信号。 SIGKILL和SIGSTOP信号既不能被忽略也不能被捕捉,因为这两个信号向内核或者超级用户提供了终止或停止信号的可靠方法。原创 2014-08-27 14:07:40 · 1504 阅读 · 0 评论 -
APUE学习笔记——8.1-8.4 进程基础
1 进程id是唯一的。(不会有进程id一样的两个进程)2进程id是可复用的,一个进程销毁后,它的id号可以被新的进程使用。但是Unix采用了延迟复用的算法,也就是进程 销毁后它的id不会立即被使用。3 进程id为0的是调度进程。这是系统进程,是内核的一部分。4 进程id为1的是init进程。init进程读取初始化文件/etc/rc*files 或者/etc/inittab,以及在/etc/init.d中的文件,使系统处于 某种状态。 init进程是用户进程,而不是系统进程。 我们原创 2014-08-29 13:57:20 · 1362 阅读 · 0 评论 -
APUE学习笔记——5缓冲Buffering、流、文件对象
缓冲的几个基本概念 缓冲的作用:减少系统read和write的次数。全缓冲 系统标准I/O缓冲区被写满时才进行真正的I/O操作。 磁盘文件一般使用全缓冲 全缓冲使用malloc来分配缓冲区行缓冲 系统遇到换行符时进行真正的I/O操作。 Terminal一般使用行缓冲 行缓冲有固定的size,当这个固定size的行缓冲区被填满时,不管有没有遇到换行符都开始进行一次I/O操作。 行缓冲在原创 2014-08-25 10:41:36 · 1536 阅读 · 0 评论 -
APUE学习笔记——3.文件共享与fcntl介绍
基本概念内核使用3个数据结构描述一个打开的文件:进程表、文件表、V节点表首先了解3种数据结构的概念 1 进程表 每一个进程有一个进程表。进程表里是一组打开的文件描述符,如标准输入0,标准输出1,标准错误2... 2 文件表 进程打开一个文件时,内核就为该文件创建一个文件表。原创 2014-08-20 16:58:44 · 2021 阅读 · 0 评论 -
APUE学习笔记——5.5~5.7数据流的打开与读写
1.open#include FILE *fopen(const char *restrict pathname,const char *restrict type)FILE *freopen(const char *restrict pathname,const char *restrict type,FILE *restrict fp);FILE *fdopen(int fd,co原创 2014-08-25 14:49:23 · 1201 阅读 · 0 评论 -
send、recv等socket编程接口的阻塞与非阻塞模式.md
socket编程中经常使用send和recv函数来接收和发送数据。 对于系统来说,不管是发送数据还是接收数据,都不是直接在内存上操作的。 发送数据有发送缓冲区,接收数据有接收缓冲区。对于send来说,send函数调用时,先将将应用程序请求发送的数据拷贝到发送缓存中,而后驱动程序会去读取发送缓冲中的数据,在进行真正的传输。 对于recv来说,recv只是从接收缓冲中读取数据,而接收缓存中的数据来自原创 2016-07-14 21:38:23 · 3484 阅读 · 0 评论 -
APUE学习笔记——10.18 system函数 与waitpid
system函数system函数用方便在一个进程中执行命令行(一行shell命令)。原创 2014-09-04 10:45:46 · 1826 阅读 · 0 评论 -
APUE学习笔记——8.11 实际用户ID、有效用户ID、设置用户ID
首先,给出本文要使用的例子,对一个数组a进行升序的插入排序int a[10] = {1,5,3,9,0,2,7,4,8,6};算法的C语言描述void inserSort(int a[], int length){ int i = 1; for(i = 1; i < length; i++) {原创 2014-08-29 09:58:57 · 1308 阅读 · 0 评论 -
APUE学习笔记——7main()函数启动与退出
程序的启动与退出过程先上图,了解进程运行的机制。 内核首先调用exec,运行C启动进程,C启动进程会调用main()函数。 其他所有函数都是由main函数直接或间接调用的。 从Figure7.2可以看出,内核与用户进程的交互,直接使用的只有三个函数:exec、_exit、_Exit exec是用来启动C启动历程的,关于用户原创 2014-08-28 15:55:21 · 1220 阅读 · 0 评论 -
unix网络编程——ioctl 函数的用法详解
[置顶] unix网络编程——ioctl 函数的用法详解分类: 2.2. 网络2012-11-26 21:39 3833人阅读 评论(2) 收藏 举报目录(?)[+]1.介绍Linux网络程序与内核交互的方法是通过ioctl来实现的,ioctl与网络协议栈进行交互,可得到网络接口的信息,网卡设备的映射属性和配置网络接口.并且还能够查看,修改,转载 2014-09-16 10:42:05 · 2125 阅读 · 0 评论 -
APUE学习笔记——10.9 信号发送函数kill、 raise、alarm、pause
转载注明出处:Windeal学习笔记kil和raisekill()用来向进程或进程组发送信号raise()用来向自身进程发送信号。#include int kill(pid_t pid,int signo);int raise(int signo); B原创 2014-09-02 08:40:07 · 1904 阅读 · 0 评论 -
va_start、va_arg、va_end、va_copy 可变参函数
1、应用与原理 在C语言中,有时我们无法给出一个函数参数的列表,比如: int printf(const char *format, ...); int fprintf(FILE *stream, const char *format, ...); 这时我们使用到了可以变参数,也就是使用...代表0个或多个参数。 那么编译器如何获原创 2014-09-11 18:28:53 · 3820 阅读 · 0 评论 -
APUE学习笔记——4.2结构体 struct stat 及其相关函数介绍
以下不少内容来自man手册结构体struct stat 结构体struct stat用于保存文件相关的所有信息。 struct stat的基本成员如下所示 struct stat { dev_t st_dev; // 文件所在设备的设备id,可以分解为主设备号和此设备号原创 2014-08-21 11:28:58 · 1114 阅读 · 0 评论 -
APUE学习笔记——11 线程基础
线程标识线程由线程号进行标识。线程号仅在线程所属的进程环境中有效。也就是说属于不同进程的两个线程可能线程号一样。线程标识用结构体pthread_t tid表示。与线程Id相关的函数如下:比较两个线程ID:#include int pthread_equal(pthread_t tid1,pthread_t tid2);原创 2014-09-04 10:34:54 · 1203 阅读 · 0 评论 -
APUE学习笔记——10.11~10.13 信号集、信号屏蔽字、未决信号
IP多播是实现数据一对多通信的模式。从一个源点传送到多个目的地,数据只拷贝一份。这里说的数据只拷贝一份,是指在每一条需要它的两个点之间,数据只有一份。如下图为《计算机网络》(谢希仁)第五版中单播与多播示意图。 因特网上的多播成为IP多播。多播组 实现多播,必然就需要有多播组。多播组需要有自己的标识符。而多播组IP即为多播组的原创 2014-09-03 13:53:40 · 1355 阅读 · 0 评论 -
APUE学习笔记——11 线程同步、互斥锁、自旋锁、条件变量
线程同步 同属于一个进程的不同线程是共享内存的,因而在执行过程中需要考虑数据的一致性。 假设:进程有一变量i=0,线程A执行i++,线程B执行i++,那么最终i的取值是多少呢?似乎一定是i=2;其实不然,如果没有考虑线程同步,i的取值可能是1.我们先考虑自加操作的过程:a,首先将内存中i的值copy到寄存器;b,对寄存器中i的copy进行自加;c,将寄存器中自加的结原创 2014-09-04 10:40:50 · 1833 阅读 · 0 评论 -
APUE学习笔记——10.15 sigsetjmp和siglongjmp
IGMP(Internet Group Management Protocol)作为因特网组管理协议,用于多播。 与ICMP一样, IGMP也被当作 IP 层的一部分,IGMP报文也通过IP数据报进行传输。 IGMP 在TCP/IP中负责局域网IP多播组成员管理的协议。用来在多播路由器与其局域网中的主机建立、维护多播组成员关系(组转载 2014-09-03 15:40:41 · 1564 阅读 · 0 评论 -
多网卡下,vlc发送IGMP组播报告包
这两天测试IGMP遇到一个问题,环境描述如下:我的vlc客户端安装在windows下,该PC有两张网卡,本地连接1接公司网,本地链接2 接路由器。wireshark坚挺本地链接2,以测试路由的IGMP功能。结果vlc加入一个多播组时,wireshark没有都是加入组的包。。原因:报告包都发往本地链接1了。我的本地链接1的IP是172.*.*.* 而路由器是192.168.1.1解原创 2014-09-23 11:15:42 · 7301 阅读 · 0 评论 -
内核态与用户态、系统调用与库函数、文件IO与标准IO、缓冲区等概念介绍
概述Linux提供了两套可以用于文件的IO接口:文件IO: open、create、close、lseek、read、write、fcntl、ioctl等标准IO: FILE、fopen、fwrite、fread、等为了理解文件IO和标准IO的区别,可能要先理解下用户态与内核态,系统调用与库函数的概念。用户态和内核态什么是用户态和内核态: 内核态: CPU原创 2018-01-17 11:34:52 · 6204 阅读 · 0 评论