
UNIX环境高级编程
文章平均质量分 73
hello_world_hust
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
如何写Makefile
如何写Makefile在该文开始之前,在chianunix推荐一篇有关Makefile的论坛文章“跟我一起写Makefile”:http://www.chinaunix.net/old_jh/23/408225.html在csdn见陈浩专栏:http://blog.youkuaiyun.com/haoel/article/details/2886#comments 而本文主要关注如转载 2014-06-09 15:29:11 · 1050 阅读 · 0 评论 -
GCC参数详解
[介绍]gcc and g++分别是gnu的c & c++编译器gcc/g++在执行编译工作的时候,总共需要4步1.预处理,生成.i的文件2.将预处理后的文件不转换成汇编语言,生成文件.s 3.有汇编变为目标代码(机器代码)生成.o的文件4.连接目标代码,生成可执行程序[参数详解]-x language filename设定文件所使用的语言,使后缀名无效,对原创 2014-06-13 16:37:44 · 1027 阅读 · 0 评论 -
让命令提交后不受本地关闭终端窗口/网络断开连接的干扰
项目中操作场景:本地机器上通过ssh连接服务器进行相关操作。这里就出现一个问题,在我们本地程序中,向服务器发送一个命令是没有任何问题的,可是当本次程序意外关闭或者由于网络断开连接,这是我们通过本地程序在服务器上创建的进程也就会被杀死。所以问题就来了:如何让对应进程能无间断的执行,即通过本机程序在服务器上创建一个进程,当本地关闭ssh连接或者与服务器的网络断开之后,这个创建的进程要继续存在而不会被杀原创 2014-06-16 20:57:53 · 2069 阅读 · 0 评论 -
GDB常用命令
Linux中包含有一个很有用的调试工具--gdb(GNU Debuger),它可以用来调试C和C++程序,功能不亚于Windows下的许多图形界面的调试工具。和所有常用的调试工具一样,gdb提供了以下功能: # 监视程序中变量的值 # 在程序中设置断点 # 程序的单步执行在使用gdb前,必须先载入可执行文件,因为要进行调试,文件中就必须包含调试信息,所以在用gcc或cc编译时就转载 2014-06-19 16:20:30 · 582 阅读 · 0 评论 -
Linux编程获取本机IP地址
使用函数getifaddrs来枚举网卡IP,其中使用到的结构体如下所示:struct ifaddrs { struct ifaddrs *ifa_next; /* Next item in list */ char *ifa_name; /* Name of interface */ unsigned int ifa_原创 2014-06-21 10:55:33 · 2215 阅读 · 1 评论 -
IO复用、多进程和多线程三种并发编程模型
I/O复用模型I/O复用原理:让应用程序可以同时对多个I/O端口进行监控以判断其上的操作是否可以进行,达到时间复用的目的。在书上看到一个例子来解释I/O的原理,我觉得很形象,如果用监控来自10根不同地方的水管(I/O端口)是否有水流到达(即是否可读),那么需要10个人(即10个线程或10处代码)来做这件事。如果利用某种技术(比如摄像头)把这10根水管的状态情况统一传达到某一点,那么就只需要1个原创 2014-08-08 17:06:00 · 9400 阅读 · 2 评论 -
tcp/ip协议listen函数中backlog参数的含义
listen函数的定义如下所示:#include int accept(int sockfd, struct sockaddr * restrict addr, socklen_t *restrict len);返回值:若成功则返回文件(套接字)描述符,若出错则返回-1int listen(int sockfd, int backlog);返回值:若成功则返回0;若出错则返回-1原创 2014-08-11 22:03:06 · 3282 阅读 · 3 评论 -
同步、异步与阻塞、非阻塞经典段子(来自网络)
老张爱喝茶,废话不说,煮开水。出场人物:老张,水壶两把(普通水壶,简称水壶;会响的水壶,简称响水壶)。1 老张把水壶放到火上,立等水开。(同步阻塞)老张觉得自己有点傻2 老张把水壶放到火上,去客厅看电视,时不时去厨房看看水开没有。(同步非阻塞)老张还是觉得自己有点傻,于是变高端了,买了把会响笛的那种水壶。水开之后,能大声发出嘀~~~~的噪音。3 老张把响水壶放到火上,立等水原创 2014-09-08 23:24:20 · 1555 阅读 · 0 评论 -
Linux环境进程间通信:共享内存
共享内存简介共享内存允许两个或多个进程共享一给定的存储区。因为数据不需要在客户进程和服务器进程之间复制,所以这是最快的一种IPC。共享内存的方式有两种:mmap()系统调用和系统V共享内存。mmap()系统调用mmap()系统调用使得进程之间通过映射同一个普通文件实现共享内存。普通文件被映射到进程地址空间后,进程可以向访问普通内存一样对文件进行访问,不必再调用read(),write(原创 2014-08-14 16:06:49 · 1144 阅读 · 1 评论 -
Linux高级进程间通信:UNIX域套接字
UNIX域套接字简介UNIX域套接字用于在同一台机器上运行的进程间的通信。虽然因特网域套接字可用于同一目的,但UNIX域套接字的效率更高。UNIX域套接字仅仅复制数据,它们并不执行协议处理,不需要添加和删除网络报头,无需计算检验和,不要产生顺序号,无需发送确认报文。UNIX域套接字提供流和数据报两种接口。UNIX域数据报服务是可靠的,既不会丢失消息也不会传递错误。UNIX域套接字是套接字和原创 2014-08-14 18:51:04 · 3161 阅读 · 0 评论 -
typedef struct与struct定义结构体
今天在定义结构体的时候发现typedef struct与struct定义结构体有一些不同之处:结构也是一种数据类型, 可以使用结构变量, 因此, 象其它 类型的变量一样, 在使用结构变量时要先对其定义。 定义结构变量的一般格式为: struct 结构名 { 类型 变量名; 类原创 2014-06-27 22:12:20 · 3425 阅读 · 0 评论 -
stdarg.h——用于函数接受可变参数
stdarg.h——用于函数接受可变参数原创 2014-06-08 21:59:30 · 989 阅读 · 0 评论 -
如何在redhat终端上网
晚上看书无聊,突然想到是不是可以在我的服务器上的终端里像在图形化界面一样上网呢?百度一下果然有:有个软件w3m(是一款文本浏览器),还有个w3m-img,这个可以在终端内显示图片,安装就很简单了:# yum install w3m w3m-img输入安装命令之后,等待安装完成,安装成功之后就可以用w3m上网了,输入如下命令# w3m www.baidu.com就可以看到如下的界面,说明转载 2014-03-14 22:31:58 · 1640 阅读 · 0 评论 -
《UNIX环境高级编程》学习笔记——进程环境
C程序的存储空间布局一个C程序包含下面几个部分:正文段。这是由CPU执行的机器指令组成。通常,正文段可共享,所以即使是频繁执行的程序(如文本编译器、C编译器和shell等)在存储器中也只需要一个副本,另外,正文段常常是只读的,以防止程序由于意外而修改其自身的指令。初始化数据段。通常将此段称为数据段,它包含了程序中需要明确地赋初值的变量。例如,C程序中出现在任何函数之外的声明:原创 2014-03-28 17:06:39 · 798 阅读 · 0 评论 -
《UNIX环境高级编程》学习笔记——进程控制(一)
fork函数一个现存的进程可以通过fork函数创建一个新的进程:#include pid_t fork(void); Returns:0 in child,process ID of child in parent, -1 on errorfork函数创建的新进程叫子进程。这个函数被调用一次,但返回两次。在原创 2014-03-28 22:30:29 · 962 阅读 · 0 评论 -
测试:重命名一个文件,指向它的符号链接会不会失效?
文件类型为符号链接的文件,其文件内容是该文件实际指向文件的文件名。那么如果修改符号链接所指文件的文件名,该符号链接是否会成为无效状态呢?如上图,首先使用touch命令创建一个新文件file1,然后使用命令ln -s创建该文件的符号链接,这样两个文件就关联起来了。通过调用任意其中一个文件,都可以查看文件中的内容。如在file1中输入一段文字: i am just a test!。通原创 2014-03-21 14:41:05 · 1934 阅读 · 0 评论 -
Linux下远程文件传输命令——scp
scp用于通过网络实现主机之间的文件复制。它使用ssh来进行文件传输,并且和ssh一样使用同样的认证和提供同样的安全性。原创 2014-05-04 15:10:39 · 1941 阅读 · 0 评论 -
《UNIX环境高级编程》学习笔记——进程控制(二)
exec函数当进程调用一种exec函数时,该进程执行的程序完全替换为新程序,而新程序则从其main函数开始执行。因为调用exec并不创建新进程,所以前后的进程ID并未改变。exec只是用一个全新的程序替换了当前进程的正文、数据、堆和栈段。有6中不同的exec函数可供使用,它们常常被统称为exec函数。这些函数之间的第一个区别是前4个取路径名作为参数,后两个则取文件名作为参数。当原创 2014-04-01 20:34:54 · 726 阅读 · 0 评论 -
linux获取系统时间
1.时间表示在程序当中,我们经常要输出系统当前的时间,比如我们使用date命令的输出结果。这个时候我们可以使用下面两个函数time_t time(time_t *tloc); //时间精度为秒char *ctime(const time_t *clock); //将秒数转化为字符串time函数返回从1970年1月1转载 2014-06-24 20:27:41 · 1230 阅读 · 0 评论 -
链接库的创建和使用
在/usr/lib目录下面,我们会看到许多的文件形如:libxxx.so,libxxx.a这样的形式。libxxx.a我们称之为静态链接库,或者简称为链接库,libxxx.so称之为共享链接库,或者是动态链接库。=== Archives === 我们编程的时候经常使用一些库,例如我们在编写网络捕获程序的时候,我么你使用libpcap,写网络发包函数的时候,我们使用libnet库。转载 2014-06-06 17:08:30 · 728 阅读 · 0 评论 -
记录锁(record locking)机制
记录锁机制介绍原创 2014-06-08 21:32:22 · 1814 阅读 · 0 评论 -
Linux信号机制
信号概念信号是软件中断,很多比较重要的应用程序都需要处理信号,信号提供了一种处理异步事件的方法。每个信号都有一个名字,这些名字都以三个字符SIG开头。例如,SIGABORT是要装信号,当进程调用abort函数时产生这种信号。不存在编号为0的信号。很多条件可以产生信号:当用户按某些终端键时,引发终端产生的信号。在终端按DELETE键(或者很多系统中的Ctrl+C键)通常产生终原创 2014-08-17 16:16:40 · 1286 阅读 · 0 评论