-
unix环境高级编程
收藏unix环境高级编程
最近更新文章
c++ primer 7 函数
7.2参数传递
7.2.1非引用形参
普通的非引用类型的参数通过复制对应的实参实现初始化。
当用实参副本初始化形参时,函数并没有访问调用所传递的实参本身,因此不会修改实参的值。
1指针形参
函数的形参可以是指针,此时将复制实参指针。与其他非引用类型的形参一样,该类形参的任何改变也仅作用于局部副本。
如果函数将新指针赋给形参,主调函 ...
c++ primer 4 数组和指针
1 数组
显式初始化数组
int ia[3] = {1,2,3};
如果没有显式提供元素初值,则数组元素会像普通变量一样初始化
a)如果函数体外定义的内置数组,其元素均初始化为0
b)在函数体内定义的内置数组,其元素无初始化
不允许数组直接复制和赋值
数组操作
a)数组下标类型是size_t
2 指针
指针概念:指针用于指向对象。与迭代器一样,指针提 ...
c++ primer 3 标准库类型
c++标准库定义了高级的抽象数据类型(abstract data type)
二种最重要的标准库类型string vector
1、命令空间的using声明
using声明可以在不需要加前缀namespace_name::的情况下访问命令空间中的名字
using namespace::name
使用了using声明,我们就可以直接引用名字,而不需要再引用该名字的命令空间 ...
如何学习linux下c语言编程
一、工具的使用
1、学会使用vim/emacs,vim/emacs是linux下最常用的源码编辑具,不光要学会用它们编辑源码,还要学会用它们进行查找、定位、替换等。新手的话推荐使用vim,这也是我目前使用的文本编辑器。
2、学会makefile文件的编写规则,并结合使用工具aclocal、autoconf和automake生成makefile文件。
3、掌握gcc和gdb的基本用 ...
UNIX网络编程卷一:4 基本套接字编程
1、socket函数
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
int socket(int domain, int type, int protocol);
domain参数指明协议族,该参数也往往被称为协议域 ...
UNIX网络编程卷一:3 套接字编程简介
1、套接字地址结构
ipv4套接字地址结构
<netinet/in.h>
struct in_addr
struct sockaddr_in
2、通用套接字地址结构
<sys/socket.h& ...
UNIX网络编程卷一:2传输层:TCP UDP SCTP
1、总图
udp是一个简单的、不可靠的数据报协议,而tcp是一个复杂、可靠的字节流协议
TCP的某些特性一旦理解,就很容易编写健壮的客户和服务器 ...
UNIX系统编程笔记:3 Unix系统中的进程
《UNIX系统编程》第三章 笔记
1、进程标识
UNIX用惟一的被称为进程ID的整数值来标识进程。
每个进程还有一个父进程ID,这个父进程ID最 ...
Makefile样例
.PHONY:clean
CC=gcc
CFLAGS=-Wall -g
BIN=miniftpd
OBJS=main.o sysutil.o session.o ftpproto.o privparent.o str.o tunable.o parseconf.o
LIBS=-lcrypt
$(BIN):$(OBJS)
$(CC) $(CFLAGS) $^ -o $@ ...
UNIX-LINUX编程实践教程笔记:5 学习stty
1、设备就像文件
对unix来说,声卡、终端、鼠标和磁盘文件是同一种对象。在unix系统中,每个设备都被当做一个文件。每个设备都有一个文件名、一个i-节点号、一个文件所有者、一个权限位的集合和最近修改时间。文件有关的所有内容都将运用于终端和其他的设备。
2、设备具有文件名
每个加载到unix机器的设备(终端、打印机、鼠标、磁盘)都通过文件名表示。表示设备的文件名存放在 ...
Unix环境高级编程笔记:12、高级IO
1、非阻塞IO
系统调用分成“低速”系统调用和其他系统调用。低速系统调用是可能会使进程永远阻塞的一类系统调用
1)如果某些文件类型(管道、终端设备、网络设备)的数据不存在,则读操作可能会使调用者永远阻塞
2)如果数据不能立即被上述同样类型的文件接受,则写操作也会使调用者永远阻塞。
3)在某种条件发生之前,打开某些类型的文件会被阻塞
4)对已经加上强 ...
Unix环境高级编程笔记:13、守护进程
1 守护进程
守护进程也称精灵进程(daemon)是生存期较长的一种进程。它们常常在系统自举时启动,仅在系统关闭时才终止。
因为没的控制终端,所以它们是在后台运行的。
2、守护进程特征
父进程ID为0的各进程通用是内核进程,它们作为系统自举过程中的一部分启动
内核进程是特殊的,通用存在于系统的整个生命周期。它们以超级用户特权运行,无控制终端,无命令 ...
Unix环境高级编程笔记:10、信号
信号是软件中断,信号提供了一种处理异步事件的方法。
1、信号概念
每个信号都有一个名字,这些名字都以三个字符SIG开头。
SIGABRT是夭折信号,当进程调用abort函数时产生这种信号
SIGALRM是闹钟信号,当由alarm函数设置的计时器超时后产生此信号。
在头<signal.h>中,这些信号都被定义为正整数(信号编号).
...
Unix环境高级编程笔记:9、进程关系
1、进程组
#include <unistd.h>
pid_t getpgrp(void); 返回值:调用进程的进程组ID
每个进程组都可以有一个组长进程。组长进程标识是,其进程组ID等于其进程ID
组长进程可以创建一个进程组,创建该组中的进程,然后终止。只要在某个进程组中有一个进程存在,则该进程组就存在,这与进程 ...
Unix环境高级编程笔记:8、进程控制
1、进程标识符
每个进程都有一个非负整型表示的唯一进程ID。
ID为0的进程通常是调度进程,常常被称为交换进程(swapper)。
ID为1通常是init进程,在自举过程结束时由内核调用。该进程文件在/etc/init
#include <unistd.h>
gid_t getegid(void); 获取有效用户ID
u ...
Unix环境高级编程笔记:7、进程环境
1、进程终止
a)进程终止的8种方式
从main返回
调用exit
调用_exit或_Exit
最后一个线程从其启动进程返回
最后一个线程调用pthread_exit
调用abort
接到一个信号并终止
最后一个线程对取消请求做出响应
b)exit函数
_exit和_Exit立即进 ...
Unix环境高级编程笔记:5、标准IO库
1、fwide
设置流的定向
#include <stdio.h>
#include <wchar.h>
int fwide(FILE *fp,int mode);
mode参数值为负,fwide试图使指定的流是字节
mode参数值为正,fwide将试图使指定的流是宽定向
mode参数值为0,fwide ...
Unix环境高级编程笔记:4、文件和目录
1、stat fstat lstat
#include <sys/stat.h>
int stat(const char * restrict pathname,struct stat *restrict buf);
int fstat(int filedes,struct stat *buf);
int lstat(const cha ...