51CTO博客开发
以下程序是一个信息编码的程序,阅读其encode部分,并补全其decode部分 最后运行程序,会打印出的一句话。这句话就是我们要求的答案。 注意!这句话是用GBK编码的! 答案请复制粘贴, 不要手动输入 每次重新登录时请重新答题。 #include <stdio.h> #include&n
一个百度的面试题:给一个二进制字符串str(即只包含0和1的字符),找到其中连续最长0出现的位置。 #include <string.h>#include <stdio.h> int getLongestZeroPos(char *str, char **start, char **en
今天面试问了一道Shell题,答的不是很好。回来查了一下找到正确答案。 假定某个目录下有若干日志文件,文件名是log.2011mmddhhmmss(mmddhhmmss为任意的时间戳),更改成log.2012mmddhhmmss。 这里必然用到正则表达式,首先想到一个Perl的实现 #!/usr/bin/perl if ($#ARGV != 0
1. 概念 当从一个fd读,写到另一个fd时,可以在下列形式的循环中使用阻塞I/0。 while((n = read(STDIN_FILENO, buf, BUFSIZ)) > 0) if (write(STDOUT_FILENO, buf, n) != n) exit(1); 但是如果必须从两个fd中读,如果仍然
1. 包 (1).将数据和函数包装到单独的命名空间中称为封装(encapsulation)。Perl中的包相当于C++中的命名空间,包的作用域是从包的声明到包含在最内层的块,包中的所有变量都有一个单独的符号表,同一包名下使用变量可以省略前缀。缺省包名的包也称main包。要引用其他包的变量或子程序要给出包名的前缀(变量不能是my或local的)。(当前包——ma
符号引用 一般来说,类似$$var的结构表示,$var是一个引用变量,而且程序员希望该表达式能够返回$var所指向的值。 假如$var不是引用变量的话会出现什么情况呢?Perl并不是断然打印出错误信息,而是尝试检查$var的值是否为一字符串。如果是,Perl将以该字符串作为正规的变量名与这个变量重新加以组合!考虑下面的例子: #!/usr/bin/perl $
概念 守护进程,也就是通常说的Daemon进程,是Linux中的后台服务进程。它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程常常在系统引导装入时启动,在系统关闭时终止。Linux系统中大多数服务和系统任务都是通过守护进程实现的。例如,作业规划进程crond、打印进程lqd、nfsd、lockd、rpciod(这三
pthread线程和信号 所有的异步信号发到整个进程的所有线程(异步信号如kill, lwp_kill, sigsend, kill等调用产生的都是,异步信号也称为中断),而且所有线程共享信号的处理行为(即sigaction的设置,对于同一信号的设置,某一线程的更改会影响到所有线程)。但每个线程可以有自己的mask来阻止信号的发送,所以可以通过线程对mas
线程私有数据是存储和查询与某个线程相关的数据的一种机制。把这种数据称为线程私有/特定数据的原因是希望每个线程可以独立地访问数据副本而无需担心数据同步问题。 设计线程私有数据接口的原因是:(1).线程ID不能保证是小而连续的整数。例如上一章的程序threadid得到的结果: main thread: pid 9508 tid 1
1.互斥量 当多个控制线程共享相同的内存时,需要确保每一个线程看到一致数据视图。如果不存在读取数据或者所有数据只读时不会存在一致性问题。如果某个线程正在修改变量而其他线程也可以读取或者修改这个变量的时候就需要对这些线程进行同步。在变量修改多于一个存储器访问周期时可能出现不一致的错误。(例如需要写的十一个长类型,需要多次写入内存。而写之间如果有其他线程读取就会出现同时读取一些修改过和没
1.线程实现 线程是在进程的基础上进一步的抽象,也就是说一个进程分为两个部分:线程集合和资源集合。线程是进程中的一个动态对象,它应该是一组独立的指令流,进程中的所有线程将共享进程里的资源。但是线程应该有自己的私有对象:比如程序计数器、堆栈和寄存器上下文。 线程分为三种类型: (1).内核线程: 它的创建和撤
一、core dump1.何谓 core dump? 在使用半导体作为内存的材料前,人类是利用线圈当作内存的材料,线圈就叫作 core ,用线圈做的内存就叫作core memory。如今,半导体工业澎勃发展,已经没有人用core memory 了,不过,在许多情况下,人们还是把记忆体叫作core 。 我们在开发(或使用)一个程序时,最怕的就是程序
1. 进程组、会话与终端(1).每个进程都属于一个进程组。进程组是一个或多个进程的集合,通常它们与一组作业相关联,可以接受来自同一终端的各种信号。每个进程组都有唯一的进程组ID(整数,也可以存放在pid_t类型中)。 #include <unistd.h> pid_t getpgrp(void); //返回值;调用进程的进程组ID 每个进程组都有
1. stat命令: display file or file system status [OPTIONS] -L, --dereference: follow links -f, --file-system: display file system status instead of file status for example: $stat -f / File
1. 交换进程与init进程 进程ID0是调度进程,常常被称为交换进程(swapper)。该进程并不执行任何磁盘上的程序。它是内核的一部分,因此也被称为系统进程。 进程ID1通常是init进程,在自举过程结束时由内核调用(swapper进程创建一个内核线程,然后exec来执行init)。该进程的程序文件/sbin/init。此进程负责在内核自举后启动一个
1. 环境表 每个程序都会从父进程那里接收一张环境表。和参数包一样,环境表也是一个字符指针数组,其中每个指针包含你一个null结束的C字符串地址。全局变量environ则包含该指针数组地址,称为环境指针。环境指针指向环境表,保存每个环境字符串的地址。每个环境字符串都是name=value的形式。可以用getenv和putenv来访问特定的环境标量。 ex
stat, fstst, lstat - get file status 1. stat, fstat和lstat #include <sys/types.h> #include <sys/stat.h> #include <unistd.h>  
1. 数组的长度 $#arrayname返回数组最后一个长度的下标。( 默认数组是从0下标开始) 2. 数组的切片Array slicing 从一个数组给另一个数组的元素赋值时,得出的数组称为数组片。如果右边的数组大于左边的数组时,未使用的值将放弃。如果小于,多出的左边的值将为undef。 例如: @name = ('A','B','C'); @pal = @name[0,
1.内核使用三种数据结构表示打开的文件,它们之间的关系决定了在文件共享方面一个进程对另一个进程的影响。 (1). 每个进程在进程表中都一个记录项(task_struct),包含一个打开文件描述符表(存放在用户空间)。每个文件描述符为表中一项,包括文件描述符标识和指向一个文件表项的指针。 (2). 内核为所有打开文件维持一张文件表,每个文件表项包括: a). 文件状态标
1. 常用的Perl命令行参数 -C 这个参数编译Perl程序但不会真正运行它.由此检查所有语法错误.每次修改perl程序之后我都会立刻使用它来找到任何语法错误. -w 等同于use warning; -e 从命令参数中的’’执行脚本,而非脚本文件 -n 如果需要遍历文件或者查找固定的模式,使用-n开关隐式一行一行读取文件。 常与-e连用编写类似awk的
1. 文件测试操作符 warning "Oops, A file called '$filename' already exists。\n" if -e $filename; warning "Config file is looking pretty old!\n" if -M CONFIG >28 将超过90天没有访问,且大于10
1. 控制结构 所有控制结构都可以做条件修饰符:command if (); unless(){} 等同于if(! ){} unless(){}else{} until(){} 等同于while(! ){} {} 裸块,可以用来限定my修饰符 if(){}elsif(){}...else{} ++i,i++ foreach (@mylist){print $_}; fo
Perl中的正则表达式 1. 使用简易模式 如果匹配对象是$_的内容。只要把模式写在一对//中就可以。即m//简写 $_="Fred" if (/fred/) { #... } 2. 元字符 . 匹配任何单一字符,\n除外。 如果要想包含\n在多行匹配,需要用\s来代替. 如果想让.表示字面意义,需要用\.
1.子程序 1).创建子程序:使用关键字sub sub marine { print "Hello, world\n"; } calling subroutines,使用&号 &marine (2).返回值:所有的子程序最后一个表达式的运算结果都当作返回值。所以子程序只有“&rdqu
1. 数字 (1).所有整数和浮点数都按double类型存储。例如0, -40, 0377, 0xFF,1.25, 255.0, -6.5e24 (2).可以插入下划线吧若干位数分开61_298_040_283_768(应该用逗号来分,但是逗号在perl中有其他意义) (3).运算:除法总是按浮点数运算.例如10/3=3.33333... 支持整数取
1.输入:一个文本文件,第一行是一个数字n,其他每行分别是一个单词以及它出现的百分比。 输出:输出n个单词,每个单词出现的几率符合它的百分比。 awk 'BEGIN{sum=0;}1{n=$0}2,${up=sum+$1;while(sum<$1){arr[sum]+=$2;sum++;}if(i>100){exit 1;}}END{while(--n>0
What is High Availability High availability refers to the ability of users to access a system without loss of service. Deploying a high availability system minimizes the time when the system
Bazaar是一款开源的分布式版本控制工具。分布式版本控制(Distributed Version Control System)是一种不需要中心服务器管理文件版本的方法,它也可以使用中心服务器。对版本的更改可以合并到使用分布式版本控制系统的其他用户的版本里,实现灵活的控制。另外,它大多数操作在客户机本地进行,不需要网络连接,因此比集中式服务器操作起来快得多。主流的分布式版本控制工具有
使用bzr发布项目分支到launchpad 1. 登录https://launchpad.net/bzr 注册帐号并登录。 2. 进入个人信息页https://launchpad.net/~userid 3. 首先要注册一个SSH密钥用于发布项目分支到launchpad.net上。 首先创建一个密钥,类型为RSA SHELL>ssh-keygen -t
Copyright © 2005-2024 51CTO.COM 版权所有 京ICP证060544号