Linux/Shell
文章平均质量分 90
阳光岛主
阳光、快乐、创新
展开
-
Linux / MacOS 修改 ls 显示年月日的时间格式
Linux 修改时间显示格式本文参考转自米扑博客:Linux / MacOS 修改 ls 显示年月日的时间格式Linux 系统的 ls 默认支持 --full-time,但是 MacOS 系统下的 ls 不支持 --full-time1、Linux 系统下的ls --full-time 1 2 3 4 5 6 7 8...原创 2020-02-22 15:46:57 · 18722 阅读 · 6 评论 -
为什么unix/linux/ubuntu比windows高级(国外专家解答)
我知道你们很少有人用Linux,而且还有相当一部分人根本就没听说过Linux。这并不奇怪,其他大学计算机系的情况也大都如此。在你们眼里只有Windows,只有微软,比尔盖茨是你们大多数人的偶像。可是我现在要告诉你们的是:你们全都错了!你们不能接受,这是可以理解的,因为微软已经很成功的把他们错误的思想灌输到你们心中,是的,错误的!下面我将要告诉你为什么你们是错的以及为什么建议你使用Linux1 S#转载 2010-02-23 18:24:00 · 8030 阅读 · 6 评论 -
Installing Software in Ubuntu
Installing Software in UbuntuIntroductionMost Windows users who migrate to Ubuntu end up confused about softwareinstallation. They go to a website, download a .tar.gz file,double-clic转载 2010-02-24 12:02:00 · 4445 阅读 · 0 评论 -
ubuntu下C编程,编译基础
C 编程中相关文件后缀 .a 静态库 (archive) .c C源代码(需要编译预处理) .h C源代码头文件 .i C源代码(不需编译预处理) .o 对象文件 .s 汇编语言代码 .so 动态库 单个源文件生成可执行程序 下面是一个简单的“hello,转载 2010-02-25 10:56:00 · 3995 阅读 · 1 评论 -
饮水思源:Ubuntu用户应关注Debian
当今最热门的桌面Linux非Ubuntu莫属,它已经拥有数量众多的爱好者,已经成为PC用户的主流操作系统之一。Ubuntu定时发布管理战略的劣势之一是,有时候不能包含一些有用的升级软件包,而Debian不稳定版尽管不提供稳定<!-- <!--itop_client = 876;itop_slotid = 1818;itop_width = 234;转载 2010-03-01 15:35:00 · 4465 阅读 · 0 评论 -
Installing VMware Tools in Ubuntu
Installing VMware Tools in Ubuntu Ive noticed that people are installing Linux distributions in virtual machines. Especially the virtualization products of VMware are popular. The mos转载 2010-03-11 19:11:00 · 5107 阅读 · 0 评论 -
Linux Make(Makefile)由浅入深的学习与示例剖析
经过长时间学习和研究linux GNU make工程管理器,现在把学习心得与大家分享一下,希望本文能教会您一些有用的东西。在Linux/UNIX 系统中,习惯使用 Makefile或makfile 文件作为make命令目标文件。Make工具最主要也是最基本的功能就是通过makefile文件来描述源程序之间的相互依赖关系并自动维护编译工作。而makefile 文件需要按照某种语法进行编写,文件中需要说明如何编译各个源文件并连接生成可执行文件,并要求定义源文件之间的依赖关系。一、多文件的总体结构如下图所示,本示原创 2010-07-06 23:23:00 · 15006 阅读 · 6 评论 -
Linux Shell 常用命令与目录分区的学习总结
很早就想根据自己的学习规律和遗忘规律,自己总结一下Linux/Unix系统的Shell命令,一来便于自己时常查询之用,二来也分享于各位博友Linux shell是系统的用户界面,即命令行。它提供了用户与内核进行交互式操作与控制的接口,接受用户输入的命令并把它送入内核中去执行。实际上Shell是Linux/Unix系统的命令解释器,它解释了由用户输入的命令,类似于Windows系统平台下的DOS界面和命令。原创 2010-07-10 23:37:00 · 7758 阅读 · 1 评论 -
RedHat yum 源配置
RedHat yum 源配置 (可参考) 今天终于能够yum更新啦,很简单,只要删除原来 /etc/yum.repo.d/rhel-debuginfo.repo,并将/etc/yum.conf内容修改为如下内容即可,经测试完全可以使用。至于yum的具体参数配置及本地源的配置以后再详细研究。rm -f /etc/yum.repo.d/rhel-debuginfo.rep转载 2010-05-27 22:46:00 · 13241 阅读 · 6 评论 -
Linux各种文件后缀名解说
首先要说明的是在Linux系统中,可执行文件没有统一的后缀,系统从文件的属性来区分可执行文件和不可执行文件。而gcc则通过后缀来区别输入文件的类别,下面我们来介绍gcc所遵循的部分约定规则。一般.c为后缀的文件,C语言源代码文件;.a为后缀的文件,是由目标文件构成的档案库文件;.C,.cc或.cxx 为后缀的文件,是C++源代码文件;.h为后缀的文件,是程序所包含的头文件;.i 为后缀的文件,是已经预处理过的C源代码文件;.ii为后缀的文件,是已经预处理过的C++源代码文件;.m转载 2010-06-10 10:47:00 · 5718 阅读 · 0 评论 -
gcc和g++的区别
很多人不是很明白GCC与G++的区别gcc和g++都是GNU(组织)的一个编译器。误区一:gcc只能编译c代码,g++只能编译c++代码两者都可以,但是请注意:1.后缀为.c的,gcc把它当作是C程序,而g++当作是c++程序;后缀为.cpp的,两者都会认为是c++程序,注意,虽然c++是c的超集,但是两者对语法的要求是有区别的。C++的语法规则更加严谨一些。2.编译阶段,g++会调用gcc,对于c++代码,两者是等价的,但是因为gcc命令不能自动和C++程序使用的库联接,所以通常用g++来转载 2010-06-13 11:03:00 · 4304 阅读 · 0 评论 -
阻塞和非阻塞通信
阻塞通信意味着通信方法在尝试访问套接字或者读写数据时阻塞了对套接字的访问。在 JDK 1.4 之前,绕过 阻塞限制的方法是无限制地使用线程,但这样常常会造成大量的线程开销,对系统的性能和可伸缩性产生影响。java.nio 包改变了这种状况,允许服务器有效地使用 I/O 流,在合理的时间内处理所服务的客户请求。没有非阻塞通信,这个过程就像我所喜欢说的“为所欲为”那样。基本上,这个过程就是发送和读取任何能够发送/读取的东西。如果没有可以读取的东西,它就中止读操作,做其他的事情直到能够读取为止。当发送数据时,该过转载 2010-09-19 17:35:00 · 10247 阅读 · 0 评论 -
linux多线程pthread
<br />1.Linux线程的发展<br /> 早在LINUX2.2内核中。并不存在真正意义上的线程,当时Linux中常用的线程pthread实际上是通过进程来模拟的,也就是同过fork来创建“轻”进程,并且这种轻进程的线程也有个数的限制:最多只能有4096和此类线程同时运行。<br /> 2.4内核消除了个数上的限制,并且允许在系统运行中动态的调整进程数的上限,当时采用的是Linux Thread 线程库,它对应的线程模型是“一对一”,而线程的管理是在内核为的函数库中实现,这种线程得到了广泛的应原创 2010-10-04 11:58:00 · 15637 阅读 · 0 评论 -
pthread多线程编程的学习小结
pthread多线程编程整理=================================================================================pthread_mutex_lock 函数名pthread_mutex_lock, pthread_mutex_trylock, pthread_mutex_unlock - lock and unlock a mutex SYNOPSIS概要#include int pthread_mutex_lock(pthrea转载 2010-10-04 12:33:00 · 40634 阅读 · 1 评论 -
Linux下gdb用法简单介绍
<br />GDB是GNU开源组织发布的一个强大的UNIX下调试程序工具。或许各位比较喜欢那种图形界面方式的,像VC,BCB等IDE的调试,但如果你是在UNIX平台下作软件,你会发现GDB这个调试工具有比VC,BCB的图形化调试器更强大的功能。所谓“寸有所长,尺有所短”就是这个道理。<br /> <br />一般来说,GDB主要帮助你完成下面四个方面的功能:<br />1、启动你的程序,可以按照你自定义的要求随心所欲的运行程序。<br />2、可以让调试程序在你所指定的位置的断点处停止。<br />3、当程原创 2010-10-09 15:18:00 · 24570 阅读 · 2 评论 -
编程学习书籍推荐(小结)
研发推荐书籍介绍【推荐参考】http://www.sudu.cn/info/html/edu/20080403/261058.html原创 2010-12-03 09:41:00 · 5596 阅读 · 1 评论 -
将stdout、stderr导入到指定文件
<br />在编写程序中,经常用到stdout、stderr作为输出,通常stdout用于输出程序运行正常时的信息,stderr用于输出程序出错时的信息。我们可以通过一些命令将stdout、stderr在屏幕上的输出导入到指定的文件。<br /> 1、准备工作<br /> 带有stdout、stderr输出的test.cpp<br /><br /> /* <br /> ** test.cpp <br /> */<br /> #include <iostream><br /> #include原创 2010-10-13 11:11:00 · 6215 阅读 · 0 评论 -
GDB调试程序6--查看源程序
查看源程序一、显示源代码 GDB 可以打印出所调试程序的源代码,当然,在程序编译时一定要加上-g的参数,把源程序信息编译到执行文件中。不然就看不到源程序了。当程序停下来以后, GDB会报告程序停在了那个文件的第几行上。你可以用list命令来打印程序的源代码。还是来看一看查看源代码的GDB命令吧。 list 显示程序第linenum行的周围的源程序。 list 显示函数名为function的函数的源程序。 list 显示当前行后面的源程序。转载 2010-10-12 13:52:00 · 17514 阅读 · 0 评论 -
Linux 内核剖析
简介: Linux® 内核是一个庞大而复杂的操作系统的核心,不过尽管庞大,但是却采用子系统和分层的概念很好地进行了组织。在本文中,您将探索 Linux 内核的总体结构,并学习一些主要的子系统和核心接口。由于本文的目标是对 Linux 内核进行介绍并探索其体系结构和主要组件,因此首先回顾一下 Linux 的简短历史,然后从较高的层次审视 Linux 内核的体系结构,最后介绍它的主要子系统。Linux 内核具有超过 600 万行的代码,因此本文不可能进行完整的介绍。请使用指向其他内容的链接进一步学习。Linux转载 2010-12-06 13:25:00 · 3945 阅读 · 0 评论 -
Linux 信号signal处理函数
alarm(设置信号传送闹钟)相关函数 signal,sleep表头文件 #include定义函数 unsigned int alarm(unsigned int seconds);函数说明 alarm()用来设置信号SIGALRM在经过参数seconds指定的秒数后传送给目前的进程。如果参数seconds 为0,则之前设置的闹钟会被取消,并将剩下的时间返回。返回值返回之前闹钟的剩余秒数,如果之前未设闹钟则返回0。范例 #include#includevoid handler() {printf("hell转载 2010-10-16 16:17:00 · 5870 阅读 · 0 评论 -
GDB调试core文件样例(如何定位Segment fault)
core dump又叫核心转储, 当程序运行过程中发生异常, 程序异常退出时, 由操作系统把程序当前的内存状况存储在一个core文件中, 叫core dump. (linux中如果内存越界会收到SIGSEGV信号,然后就会core dump)在程序运行的过程中,有的时候我们会遇到Segment fault(段错误)这样的错误。这种看起来比较困难,因为没有任何的栈、trace信息输出。该种类型的错误往往与指针操作相关。往往可以通过这样的方式进行定位。一 造成segment fault,产生core dump的原创 2010-10-16 12:39:00 · 73714 阅读 · 2 评论 -
Linux 信号signal处理机制
信号是Linux编程中非常重要的部分,本文将详细介绍信号机制的基本概念、Linux对信号机制的大致实现方法、如何使用信号,以及有关信号的几个系统调用。 信号机制是进程之间相互传递消息的一种方法,信号全称为软中断信号,也有人称作软中断。从它的命名可以看出,它的实质和使用很象中断。所以,信号可以说是进程控制的一部分。 一、信号的基本概念 本节先介绍信号的一些基本概念,然后给出一些基本的信号类型和信号对应的事件。基本概念对于理解和使用信号,对于理解信号机制都特别重要。下面就来看看什么是信号。 1、基本概念 软中断转载 2010-10-16 14:53:00 · 5942 阅读 · 0 评论 -
一个简单的Linux下Client/Server应答例子
<br />题目:Hello world<br />要求:案例程序基于TCP协议,由客户程序启动后向服务器程序发送“hello world”,服务器程序显示客户机IP地址、端口、以及发送的信息。服务器将收到的字符串发送给客户端,客户端显示验证。<br />使用方法:在linux下编译<br />$gcc -o client client.c<br />$gcc -o server server.c<br />先运行server程序$./server<br />再运行client程序$./client xxx原创 2010-10-17 19:34:00 · 12113 阅读 · 4 评论 -
Linux多线程Pthread学习小结
简介POSIX thread 简称为pthread,Posix线程是一个POSIX标准线程.该标准定义内部API创建和操纵线程.作用线程库实行了POSIX线程标准通常称为pthreads.pthreads是最常用的POSIX系统如Linux和Unix,而微软Windowsimplementations同时存在.举例来说,pthreads-w32可支持MIDP的pthread Pthreads定义了一套 C程序语言类型、函数与常量,它以 pthread.h 头文件和一个线程库实现。数原创 2010-12-08 14:54:00 · 47054 阅读 · 8 评论 -
VC++中四种进程或线程同步互斥的控制方法
现在流行的进程线程同步互斥的控制机制,其实是由最原始最基本的4种方法实现的。由这4种方法组合优化就有了.Net和Java下灵活多变的,编程简便的线程进程控制手段。 这4种方法具体定义如下 在《操作系统教程》ISBN 7-5053-6193-7 一书中可以找到更加详细的解释 1临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。 2互斥量:为协调共同对一个共享资源的单独访问而设计的。 3信号量:为控制一个具有有限数量用户资源而设计。 4事转载 2010-10-26 13:30:00 · 6665 阅读 · 0 评论 -
doxgen comments example
<br />1. 模块定义(单独显示一页)<br />/*<br />* @defgroup 模块名 模块的说明文字<br />* @{<br />*/<br />… 定义的内容 …<br />/** @} */ // 模块结尾<br />2. 分组定义(在一页内分组显示)<br />/*<br />* @name 分组说明文字<br />* @{<br />*/<br />… 定义的内容 …<br />/** @} */<br />3. 变量、宏定义、类型定义简要说明<br />/** 简要说明文字 */转载 2010-10-27 11:13:00 · 3982 阅读 · 0 评论 -
Linux网络编程一步一步学-异步通讯聊天程序select
<br />Linux网络编程一步一步学-异步通讯聊天程序select<br />Client<br />#include <stdio.h><br />#include <stdlib.h><br />#include <errno.h><br />#include <string.h><br />#include <sys/types.h><br />#include <netinet/in.h><br />#include <sys/socket.h><br />#include <sys/wait.原创 2010-10-25 20:26:00 · 4584 阅读 · 0 评论 -
Python自动单元测试实例
Python unittest模块的相关用法待测源码类:widget.py#!/usr/bin/env pythonclass Widget: def __init__(self, size = (40, 40)): self._size = size def getSize(self): return self._size def resize(self, width, height): if width原创 2010-10-27 17:45:00 · 10702 阅读 · 0 评论 -
Python自动单元测试框架
<br />简介: 软件的测试是一件非常乏味的事情,在测试别人编写的软件时尤其如此,程序员通常都只对编写代码感兴趣,而不喜欢文档编写和软件测试这类"没有创新"的工作。既然如此,为什么不让程序员在编写软件时自己加入一些用于测试的代码,使测试过程自动化呢?在软件工程中,这一技术称为自动单元测试,本文介绍在用Python开发软件时如何实现这一目标。<br /> <br />一、软件测试<br />大型软件系统的开发是一个很复杂的过程,其中因为人的因素而所产生的错误非常多,因此软件在开发过程必须要有相应的质量保证活转载 2010-10-27 17:48:00 · 5870 阅读 · 0 评论 -
异步套接字基础:select函数以及FD_ZERO、FD_SET、FD_CLR、FD_ISSET
<br />select函数:<br /> 系统提供select函数来实现多路复用输入/输出模型。原型:<br /> #include <sys/time.h><br /> #include <unistd.h><br /> select函数:<br /> 系统提供select函数来实现多路复用输入/输出模型。原型:<br /> #include <sys/time.h><br /> #include <unistd.h><br /> int select(int maxfd,fd_set转载 2010-10-28 13:42:00 · 25467 阅读 · 0 评论 -
select,poll,epoll区别
<br />select的本质是采用32个整数的32位,即32*32= 1024来标识,fd值为1-1024。当fd的值超过1024限制时,就必须修改FD_SETSIZE的大小。这个时候就可以标识32*max值范围的fd。<br />对于单进程多线程,每个线程处理多个fd的情况,select是不适合的。<br />1.所有的线程均是从1-32*max进行扫描,每个线程处理的均是一段fd值,这样做有点浪费<br />2.1024上限问题,一个处理多个用户的进程,fd值远远大于1024<br />所以这个时候应原创 2010-10-28 14:20:00 · 18319 阅读 · 5 评论 -
关于进程和线程以及句柄
说法一:进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位. 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源. 一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行 说法二:进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本转载 2010-10-26 10:34:00 · 14673 阅读 · 0 评论 -
Kill杀死进程方法大全
*杀死进程最安全的方法是单纯使用kill命令,不加修饰符,不带标志。 首先使用ps -ef命令确定要杀死进程的PID,然后输入以下命令: # kill -pid 注释:标准的kill命令通常都能达到目的。终止有问题的进程,并把进程的资源释放给系统。然而,如果进程启动了子进程,只杀死父进程,子进程仍在运行,因此仍消耗资源。为了防止这些所谓的“僵尸进程”,应确保在杀死父进程之前,先杀死其所有的子进程。 *确定要杀死进程的PID或PPID # ps -ef | grep h原创 2010-12-24 10:48:00 · 22251 阅读 · 2 评论 -
Linux网络编程IPv4和IPv6的inet_addr、inet_aton、inet_pton等函数小结
预备的知识,请参考博客: 网络字节序与主机字节序的转换原创 2010-12-27 15:17:00 · 42438 阅读 · 2 评论 -
C宏定义的小结
1,防止一个头文件被重复包含 #ifndef BODYDEF_H #define BODYDEF_H //头文件内容 #endif 2,得到指定地址上的一个字节或字 #define MEM_B( x ) ( *( (byte *) (x) ) ) #define MEM_W( x ) ( *( (word *) (x) ) ) 3,得到一个field在结构体(struct)中的偏移量 #define FPOS( type, field ) ( (dword) &(( type *) 0)-> f原创 2010-12-28 17:58:00 · 10332 阅读 · 0 评论 -
Linux学习笔记——管道PIPE
管道:当从一个进程连接数据流到另一个进程时,使用术语管道(pipe)。#i nclude int pipe(int filedes[2]); //创建管道pipe()说明:返回值:0成功,-1出错。如果调用成功,则进程此时由了两个额外的打开文件描述符,filedes[0]中的值是管道的读取端,而filedes[1]是管道的写入端。#include#include#include#include#includeint main(){ int pipe_fd[2]; pid_t pid; ch转载 2011-01-04 11:17:00 · 4337 阅读 · 0 评论 -
Linux下的signal信号机制
在Linux中,要发送一个信号相当容易。程序员需要知道两个信息:要发送哪个信号,将这个信号发送给哪个进程。可以用 man 7 signal 找到一个可以利用的信号的列表。用户可以只将信号发送给用户自己的进程,也可以以root身份运行从而将信号发送给任意一进程。 程序员可以调用 int raise(int signo) 将一个信号发送给它自己。这个函数只带有一个参数,既要发送信号的编号。如:raise(SIGINT); raise(SIGKILL); 让人感兴趣的是函数 uns原创 2010-11-12 10:38:00 · 17504 阅读 · 0 评论 -
关于SIGPIPE导致的程序退出
服务器关了正在连接的客户端socket_fd,客户端做出的反应过程当服务器close一个连接时,若client端接着发数据。根据TCP协议的规定,会收到一个RST响应,client再往这个服务器发送数据时,系统会发出一个SIGPIPE信号给进程,告诉进程这个连接已经断开了,不要再写了。 根据信号的默认处理规则SIGPIPE信号的默认执行动作是terminate(终止、退出),所以client会退出。若不想客户端退出可以把SIGPIPE设为SIG_IGN 如: signal(SIGPIPE,转载 2010-11-11 17:08:00 · 4659 阅读 · 0 评论 -
fmemopen, open_memstream, open_wmemstream
NAME fmemopen, open_memstream, open_wmemstream - open memory as streamSYNOPSIS #includeFILE*fmemopen(void*buf,size_tsize,constchar*mode);FILE*open_memstream(char**ptr,size_t*sizeloc);#includeFILE*open_wmemstream(wchar_t**ptr,size_t*sizeloc);fm转载 2011-01-06 19:42:00 · 6707 阅读 · 0 评论 -
struct linger
TCP连接断开的时候调用closesocket函数,已经讨论过有优雅的断开和强制断开,那么如何设置断开连接的方式呢?是通过设置socket描述符一个linger结构体属性。linger结构体数据结构如下:struct linger{ int l_onoff; int l_linger;};有三种组合方式:第一种 l_onoff = 0; l_linger忽略 这种方式下,就是在closesocket的时候立刻返回,底层会将未发送完的数据发送完成后再释放资源,也就是优雅的退出原创 2010-11-11 17:16:00 · 4246 阅读 · 0 评论