
linux
文章平均质量分 58
buaa_shang
这个作者很懒,什么都没留下…
展开
-
Stack的三种含义
作者: 阮一峰日期: 2013年11月29日学习编程的时候,经常会看到stack这个词,它的中文名字叫做"栈"。理解这个概念,对于理解程序的运行至关重要。容易混淆的是,这个词其实有三种含义,适用于不同的场合,必须加以区分。含义一:数据结构stack的第一种含义是一组数据的存放方式,特点为LIFO,即后进先出(Last in, first out)。在这种数据转载 2013-12-04 20:12:52 · 995 阅读 · 0 评论 -
cp命令的实现
#include #include #include #define BUFFERSIZE 4096#define COPYMODE 0644void oops(char *, char *);int main(int argc, char *argv[]){ int in_fd, out_fd, n_chars; char buf[BUFFERSIZE];原创 2013-06-21 16:45:30 · 1945 阅读 · 0 评论 -
Linux中more命令的实现
#include #include #include #define PAGELEN 24#define LINELEN 512void do_more(FILE *);int see_more(FILE *);int main(int argc, char *argv[]){ FILE *fp; if (argc == 1) do_more(s翻译 2013-06-20 22:18:21 · 2027 阅读 · 0 评论 -
ima
1.__setup()宏简介内核组件用__setup宏来注册关键字及相关联的处理函数,__setup宏在include/linux/init.h中定义,其原型如下:#define __setup(str, fn)其中:str是关键字,fn是关联处理函数。__setup只是告诉内核在启动时输入串中含有str时,内核要去执行fn。Str必须以“=”符结束以使parse_args更方便解原创 2013-06-03 10:21:22 · 1209 阅读 · 0 评论 -
ldd 的一个安全问题
我们知道“ldd”这个命令主要是被程序员或是管理员用来查看可执行文件所依赖的动态链接库的。是的,这就是这个命令的用处。可是,这个命令比你想像的要危险得多,也许很多黑客通过ldd的安全问题来攻击你的服务器。其实,ldd的安全问题存在很长的时间了,但居然没有被官方文档所记录来下,这听上去更加难以理解了。怎么?是不是听起来有点不可思议?下面,让我为你细细道来。首先,我们先来了解一下,我们怎么来使用l转载 2013-05-15 10:11:17 · 1075 阅读 · 0 评论 -
编译简介
平台:linux编译器:GCC源文件:hello.c到底GCC在将源文件编程可执行文件的时候做了什么工作呢,首先你得指导GCC的常用命令吧,GCC在工作的步骤为:1. 预编译 命令: gcc -E hello.c -o hello.i 或者 cpp hello.c > hello.i 然后你就可以gedit hello.i来打开它。好好比转载 2013-04-21 23:10:00 · 691 阅读 · 0 评论 -
使用inotify进行文件事件通知
#include #include #include #define MAX_EVENTS 256#define BUFFER_SIZE (MAX_EVENTS * sizeof(struct inotify_event))int register_watchpoint(int fd, char *dir);int watch(int fd);void emit_event(s原创 2013-04-25 21:39:00 · 989 阅读 · 0 评论 -
Linux中时间函数的应用接口
#include #include int main(){ time_t currentTime; struct tm *tm_time; currentTime = time(NULL); tm_time = localtime(¤tTime); printf("from localtime %02d:%02d:%02d\n", t原创 2013-04-25 23:22:18 · 1077 阅读 · 0 评论 -
IPC机制---共享内存编程
#include #include #include #include #include #include #include "common.h"#define MAX_STRING 5000typedef struct { int semID; int counter; char string[MAX_STRING+1];} MY_BLOCK_T;原创 2013-04-25 15:47:19 · 907 阅读 · 0 评论 -
linux --dup dup2 文件描述符重定向函数--输入输出重定向
#include #include #include #include int main(void){#define STDOUT 1 //标准输出文件描述符 号int nul, oldstdout;char msg[] = "This is a test";/* create a file *///打开一个文件,操作者具有读写权限 如果文件不存在就创建转载 2013-04-16 10:57:24 · 2318 阅读 · 0 评论 -
cat命令的具体实现代码
#include #include #include #include #define BUFFERSIZE 4096int main(int argc, char *argv[]){ int fd, fd_tty, n_chars; char buf[BUFFERSIZE]; if (argc != 2) { fprintf原创 2013-06-21 22:13:59 · 4296 阅读 · 0 评论 -
who命令的实现
#include #include #include #include #include #include void show_info(struct utmp *);void showtime(long);int main(){ int fd; struct utmp current_record; int recle原创 2013-06-21 15:19:52 · 1942 阅读 · 0 评论 -
ls的实现还不完整
#include #include #include #include #include #include #include #include void do_ls(char *);void do_stat(char *);void show_file_info(char *, struct stat *);void mode_to_letters(int, char[])原创 2013-06-22 12:32:57 · 1033 阅读 · 0 评论 -
TCP编程的一个小例子
TCP程序的服务器端与客户端的流程图例子:服务器端等待客户端连接,若连接成功,则用户可以通过客户端向服务器端发送任意字符串,服务器端在收到字符串后,输出相关信息,在把接受到的字符串重新发生给客户端。客户端收到后显示在屏幕上服务器端:#include #include #include #include #include #include #include #inclu原创 2013-08-31 16:11:33 · 2150 阅读 · 0 评论 -
一个LINUX下管道通信的例子
client端------现在有问题...........#include #include #include #include #include #include #include #include #include #define FIFO_HANDLE_NAME "/tmp/fifo_handle "#define FIFO_CLIENT_NAME "/tmp/原创 2013-08-30 18:38:43 · 2190 阅读 · 0 评论 -
Linux多线程的一个小例子
#include #include #include #include #define MAX_COUNT 9pthread_mutex_t mutex; //互斥变量pthread_cond_t cond; //条件变量int count = 0;void AddCount_Odd_Func(void);void AddCount_Even_Func(void);int原创 2013-08-31 09:52:15 · 1067 阅读 · 0 评论 -
ubuntu安装MySQL
现在的软件越来越好安装,尤其是在ubuntu下安装软件,更是没有技巧,只需要在联网的情况下使用apt-get inatll 即可。在决定安装mysql之前,要先确定系统是否已经安装mysql。如下图: 由此可以看出系统中并没有安装mysql.下面执行sudo apt-get install mysql-server my-client进行安装。下图: 输入Y进入到安转载 2013-08-29 21:19:35 · 812 阅读 · 0 评论 -
Linux的启动流程
Refer from :http://www.ruanyifeng.com/blog/2013/08/linux_boot_process.html作者: 阮一峰日期: 2013年8月17日半年前,我写了《计算机是如何启动的?》,探讨BIOS和主引导记录的作用。那篇文章不涉及操作系统,只与主板的板载程序有关。今天,我想接着往下写,探讨操作系统接管硬件以后发生的事情,也就是操原创 2013-08-21 23:15:28 · 762 阅读 · 0 评论 -
linux程序调试
转自编程吧。。。调试-linux程序设计错误查找及纠正有几种原因会造成程序的缺陷,针对每种原因,都有一些建议的方法来查找和纠正。比如功能定义错误,设计规划错误和代码编写错误。程序调试的5个阶段使用printf来排错 相信这个方法是N多人使用的方法使用-Wall选项来排错 在使用gcc编译的时候加上-Wall选项,可以提前发现很多的原创 2013-08-21 00:29:46 · 1367 阅读 · 0 评论 -
利用curses库编程开始
curses库常用函数:注意编译时要用这样的格式:gcc xxx.c -l curses -o xxx第一个小例子:include #include int main(){ initscr(); clear(); move(10,20); addstr("Hello, world"); move(LINES-1, 0);原创 2013-06-24 00:06:59 · 2768 阅读 · 0 评论 -
pwd的实现
#include #include #include #include #include ino_t get_inode(char *);void printpathto(ino_t);void inum_to_name(ino_t, char *, int);int main(){ printpathto(get_inode(".")); printf("\原创 2013-06-23 10:03:11 · 1463 阅读 · 0 评论 -
Linux文件系统的的实现:创建一个文件的过程
考虑下面这个命令:who > userlist当这个命令完成后,文件系统增加l一个存放命令who输出内容的新文件。原创 2013-06-22 15:17:55 · 2087 阅读 · 0 评论 -
unix/linux中的dup()系统调用 --对上篇dup() dup2()例子的解释
在linux纷繁复杂的内核代码中,sys_dup()的代码也许称得上是最简单的之一了,但是就是这么一个简单的系统调用,却成就了unix/linux系统最著名的一个特性:输入/输出重定向sys_dup()的主要工作就是用来“复制”一个打开的文件号,使两个文件号都指向同一个文件。既然说简单,我们就首先来看一下它的代码(定义在fs/fcntl.c中):187 asmlinkage long sy转载 2013-04-16 11:10:27 · 1117 阅读 · 0 评论 -
通过一道面试题谈linux下的fork运行机制
fork()的返回值指明的是进程运行的上下文环境。如:pid_t pid;pid = fork();if(pid>0) {/*如果返回值大于零,表明处于父进程上下文环境中,返回值是子进程的ID号*/} else if(pid == 0) {/*返回值为零,表明处于子进程上下文环境中*/} else {/*表烦调用fork发生了错误,但仍处于父进程的上下文*/原创 2012-12-02 20:55:43 · 1290 阅读 · 0 评论 -
管道编程之pipe
pipe():创建一个新的匿名管道例子中子进程必须等待父进程写入管道之后才能读。thePipe[0]代表管道的输出,应用程序读它。thePipe[1]代表管道的输入,应用程序写它。#include #include #include #include #define MAX_LINE 80int main(){ int thePipe[2], ret;原创 2013-04-23 15:08:35 · 1104 阅读 · 0 评论 -
如何使用gdb调试程序
1.把调试信息加到可执行文件中,使用编译器的-g参数.如 : gcc -g hello.c -o hello2.最简单的启动方法:(其他方法可使用 gdb help查看)gdb 其中promgram为第一步生成的可执行文件.3.进入gdb调试环境后,可使用相关gdb命令开始调试程序(gdb的命令可以用help来查看)gdb的调试命令很多可以使用 help 来查看一原创 2012-11-23 14:23:05 · 1383 阅读 · 0 评论 -
pthread_create()使用的小问题
APUE上的一个例子#include "apue.h"#include #include pthread_t ntid;void printids(const char *s) { pid_t pid; pthread_t tid; pid = getpid(); tid = pth原创 2012-12-03 11:19:04 · 1135 阅读 · 0 评论 -
另一道与fork()有关的面试题
题目:请问下面的程序一共输出多少个“-”?#include #include #include int main(void){ int i; for(i=0; i<2; i++){ fork(); printf("-"); } return 0;}一般熟悉fork机制会认为输出为6个'-',但我们运行一下,输出的是8个'-'原创 2012-12-03 09:23:12 · 5527 阅读 · 3 评论 -
ubuntu的一个截图工具scrot
1.安装 sudo apt-get install scrot2.使用:抓取桌面 scrot desktop.png抓取窗口:scrot -bs window.png,选项 b 使 scrot 在抓取窗口时一同将外边框抓取下来,而 s 选项则让用户选择所要抓取的是何窗口。抓取区域:scrot -s rectangle.png,在执行此命令后,使用鼠标拖曳的矩形区域将被 scro原创 2012-11-09 12:06:34 · 523 阅读 · 0 评论 -
MPI并行编程简介---一个简单的事例
标准通信模式--阻塞方式//mpitest.c#include "mpi.h"#include #include #define buf_size 10int main(int argc, char *argv[]){ int myid, numprocs, other, sb[buf_size], rb[buf_size]; MPI_Sta原创 2012-11-09 13:09:36 · 3442 阅读 · 0 评论 -
linux的system函数
下面为system函数的一种实现:#include #include #include int system(const char *cmdstring){ pid_t pid; int status; if(cmdstring == NULL) //system接受命令为空时直接返回原创 2012-11-30 19:41:56 · 906 阅读 · 0 评论 -
linux ps 命令详解
linux上进程有5种状态:1. 运行(正在运行或在运行队列中等待)2. 中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号)3. 不可中断(收到信号不唤醒和不可运行, 进程必须等待直到有中断发生)4. 僵死(进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放)5. 停止(进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号原创 2012-11-30 15:23:41 · 1242 阅读 · 0 评论 -
使用mtrace()函数检内存溢出
对于内存溢出之类的麻烦可能大家在编写指针比较多的复杂的程序的时候就会遇到。Linux系统下有一个工具可以帮忙调试,这就是mtrace。mtrace主要能够检测一些内存分配和泄漏的失败等。下面我们来学习一下它的用法(man mtrace)1.在需要跟踪的程序中需要包含头文件,而且在main()函数的最开始包含一个函数调用mtrace()。由于在 main函数的最开头调用了mtrace(),所以该原创 2012-11-27 20:26:29 · 2468 阅读 · 1 评论 -
vim+cscope+ctags+Tlist使用
1.在源代码目录下生成索引文件(两条命令)(需要先下载cscope,ctags,Taglist)make cscopemake tags2.编写一个脚本文件(cs.sh)来更新cscope和ctags的索引文件#!/bin/shfind . -name "*.h" -o -name "*.c" -o -name "*.cc" > cscope.filescscope -bk原创 2012-11-08 22:34:07 · 946 阅读 · 0 评论 -
linux下的fork()函数
1.传统的fork()系统调用直接把所有的资源复制给新创建的进程.Linux的fork()使用写时拷贝(copy-on-write)页实现.写时拷贝是一种可以推迟甚至免除拷贝数据的技术,内核此时并不复制整个进程地址空间,而是让父进程和子进程共享同一个拷贝. 只有在需要写入的时候,数据才会被复制,从而使各个进程拥有各自的拷贝,也就是说,资源的复制只有在需要写入的时候才进行,在此之前,只是以只原创 2012-12-09 17:59:40 · 1209 阅读 · 0 评论 -
linux内核的container_of()宏定义分析
一、#define offsetof(TYPE, MEMBER) ((size_t) & ((TYPE *)0)->MEMBER )1. ( (TYPE *)0 ) 将零转型为TYPE类型指针;2. ((TYPE *)0)->MEMBER 访问结构中的数据成员;3. &( ( (TYPE *)0 )->MEMBER )取出数据成员的地址;4.(size_t)(&(((TYPE*)0原创 2012-12-12 11:31:46 · 1115 阅读 · 0 评论 -
交叉编译linux内核
一.下载linux内核源码 我使用的是linux-loongson-release-zb-kernel.tgz 将其解压到/usr/src目录下: tar -xzvf linux-loongson-release-zb-kernel.tgz 这样在此目录下会生成linux-loongson-release目录二.下载交叉编译工具 下原创 2013-01-13 19:19:54 · 5331 阅读 · 0 评论 -
Linux内核的引导
下面为X86 PC上从上电/复位到运行Linux用户空间初始进程的流程:系统启动(BIOS)-->Bootloader的第一阶段(MBR)-->Bootloader的第二阶段(LILO,GRUB等)-->启动内核(内核)-->运行init进程(用户空间)(1)当系统上电或复位时,CPU会将PC指针赋值为一个特定的地址0xFFFF0并执行该地址处的指令。在PC机中,该地址位于BIOS中,它保原创 2013-03-20 21:35:52 · 979 阅读 · 0 评论 -
Linux代码风格
(1)对于结构体、if/for/while/switch语句,“{”不另起一行,例如:struct var_data { int len; char data[10];};(2)如果if、for循环只有1行,不要加“{”和“}”,如:for (i = 0; i a = c;(3)if和else混用的情况下,else语句不另起一行,如:if (原创 2013-03-20 22:40:06 · 901 阅读 · 0 评论 -
shell命令的执行
1.shell命令分为内置命令和外部命令。内置命令是shell解释程序内建的,由shell直接执行,不需要派生新的进程外部命令分为二进制代码和shell脚本。2.(1)为了执行外部的二进制命令,需要一种机制,以允许子进程转换为将要被执行的命令。Unix/Linux调用exec可以做到这些。它允许一个进程用其他命令的可执行代码覆盖自己。二进制代码需要由磁盘装入内存中执行。shell解原创 2013-03-16 14:59:47 · 2383 阅读 · 0 评论