一些Linux小知识

如果我们将0x1234abcd 写入到以 0x0000 开始的内存中,则Little endian 和 Big endian 模式的存放结果如下: 
      地址         0x0000       0x0001       0x0002       0x0003 
      big-endian     0x12           0x34            0xab            0xcd 
      little-endian 0xcd           0xab            0x34            0x12 

C语言的静态函数
当一个源程序由多个源文件组成时,根据函数能否被其它源文件中的函数调用,将函数分为内部函数和外部函数。
1 内部函数(又称静态函数)
如果在一个源文件中定义的函数,只能被本文件中的函数调用,而不能被同一程序其它文件中的函数调用,这种函数称为内部函数。
定义一个内部函数,只需在函数类型前再加一个“static”关键字即可:
static  函数类型  函数名(函数参数表)
关键字“static”,译成中文就是“静态的”,所以内部函数又称静态函数。但此处“static”的含义不是指存储方式,而是指对函数的作用域仅局限于本文件。
使用内部函数的好处是:不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件中的函数同名,因为同名也没有关系。
2 外部函数
外部函数的定义:在定义函数时,如果没有加关键字“static”,或冠以关键字“extern”,表示此函数是外部函数,也就是我们最常用的函数形式。

(1)tee

sort file |uniq|tee -a file2 添加到file2的后面

(2)sed

sed 's/{old value}/{new value}/'

 sed -e ' s/tiger/wolf/' -e 's/after/before/'

sed ' s/tiger/wolf/; s/after/before/'

为了替换出现的每一个项目,在同一行中出现多个要替换的项目的情况下,您必须指定在全局进行该操作:

sed 's/tiger/wolf/g' file

sed '/wt/ s/alada/shuaige/;s/yuanchen/meinv/' file 搜索wt这一行,然后再进行多次操作

选定行的话sed '5,6 s/1/2/' sample_one

sed -n '2,6p' sample_one 显示文件的2,6行 前面的-n不显示原来的

sed '/two/ d' sample_one 删除有two的那行

sed '1,/^$/ d' {filename}  删除第一行到空白行的所有文件

(3)xargs 传递过来的每次只使用一部分

find . -name '*.py' | xargs wc -l

find . -name '*~' | xargs rm

echo {0..9} | xargs -n 2 每次传过来一个

(4)awk 也是非常强大的一个东西

(5)Makefile

edit : main.o kbd.o command.o display.o \
insert.o search.o files.o utils.o
cc -o edit main.o kbd.o command.o display.o \
insert.o search.o files.o utils.o
main.o : main.c defs.h
cc -c main.c
kbd.o : kbd.c defs.h command.h
cc -c kbd.c
command.o : command.c defs.h command.h
cc -c command.c
display.o : display.c defs.h buffer.h
cc -c display.c
insert.o : insert.c defs.h buffer.h
cc -c insert.c
search.o : search.c defs.h buffer.h
cc -c search.c
files.o : files.c defs.h buffer.h command.h
cc -c files.c
utils.o : utils.c defs.h
cc -c utils.c
clean :
rm edit main.o kbd.o command.o display.o \
insert.o search.o files.o utils.o


objects = main.o kbd.o command.o display.o \
insert.o search.o files.o utils.o
edit : $(objects)
cc -o edit $(objects)
main.o : defs.h
kbd.o : defs.h command.h
command.o : defs.h command.h
display.o : defs.h buffer.h
insert.o : defs.h buffer.h
search.o : defs.h buffer.h
files.o : defs.h buffer.h command.h
utils.o : defs.h
.PHONY : clean
clean :
-rm edit $(objects)

“伪目标”并不是一个文件,只是一个标签,由于“伪目标”不是文件,所以make无法生成它的依赖关系和决定它是否要执行。我们只有
通过显示地指明这个“目标”才能让其生效。

 $@      表示规则中的目标文件集。在模式规则中,如果有多个目标,那么,"$@"就是匹配于目标中模式定义的集合。  
 $%      仅当目标是函数库文件中,表示规则中的目标成员名。例如,如果一个目标"foo.a(bar.o)",那么,"$%"就是"bar.o","$@"就是"foo.a"。如果目标不是函数库文件(Unix下是[.a],Windows下是[.lib]),那么,其值为空。   
$<      依赖目标中的第一个目标名字。如果依赖目标是以模式(即"%")定义的,那么"$<"将是符合模式的一系列的文件集。注意,其是一个一个取出来的。   
$?      所有比目标新的依赖目标的集合。以空格分隔。   
$^      所有的依赖目标的集合。以空格分隔。如果在依赖目标中有多个重复的,那个这个变量会去除重复的依赖目标,只保留一份。   
$+      这个变量很像"$^",也是所有依赖目标的集合。只是它不去除重复的依赖目标。   
$*      这个变量表示目标模式中"%"及其之前的部分。如果目标是"dir/a.foo.b",并且目标的模式是"a.%.b",那么,"$*"的值就是"dir/a.foo"。这个变量对于构造有关联的文件名是比较有较。如果目标中没有模式的定义,那么"$*"也就不能被推导出,但是,如果目标文件的后缀是make所识别的,那么"$*"就是除了后缀的那一部分。例如:如果目标是"foo.c",因为".c"是make所能识别的后缀名,所以,"$*"的值就是"foo"。这个特性是GNU make的,很有可能不兼容于其它版本的make,所以,你应该尽量避免使用"$*",除非是在隐含规则或是静态模式中。如果目标中的后缀是make所不能识别的,那么"$*"就是空值。

(6) 制作动态链接库

#makefile-lib: 动态库实例维护文件
all: libmy.so
SRC = getdate.c gettime.c
TGT = $(SRC:.c=.o)
$(SRC): adatetime.h
    @touch $@
%.o: %.c
    cc -c $?
#生成动态链接库(libmy.so)
libmy.so: $(TGT)
    cc -s -fpic -shared -o $@ $(TGT)        #-fpic选项,增加动态库的可重定位性

(7)diff patch 文件打补丁

diff file file2 >file.patch

patch file file.patch

(8)awk一些用法

        awk -F % 'NR==7,NR==15 {printf $1}' 

        awk '/[Ss]un/,/[Mm]oon/ {print}' myfile 

(9)正则表达式

     下面是一个更复杂的表达式:\(?0\d{2}[) -]?\d{8}。
   “(”和“)”也是元字符,后面的分组节里会提到,所以在这里需要使用转义。
这个表达式可以匹配几种格式的电话号码,像(010)88886666,或022-22334455,或02912345678等。我们对它进行一些分析吧:首先是一个转义字符\(,它能出现0次或1次(?),然后是一个0,后面跟着2个数字(\d{2}),然后是)或-或空格中的一个,它出现1次或不出现(?),最后是8个数字(\d{8})。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值