摘要: 1.题库与网站资源 题库-在线提交系统(Online Judge)简介 下面是几个比较大的在线提交系统(Online Judge)里面有大量历年的竞赛题目,注册一个ID,然后用自己熟悉的语言(一般有Pascal/C/C++/Java)写好源代码提交即可,会实时返回信息告诉你是否正确。采用黑箱测试,系统里有一套标准的输入输出数据(对外保密,而且通常数据很多很怪),你的程序的输出和标准输出完全符合即可。 常见的返回信息有 AC(Accepted,通过)、WA(Wrong Answer,输出有错误)、TLE(Time Limit Exceeded,超时)、MLE(Memory Limit Ex 阅读全文
posted @ 2010-12-17 15:06 flyxiang 阅读(209) 评论(0) 推荐(0)
摘要: 第一步,在线安装中文语言支持包:sudo apt-get install xpdf-chinese-simplified xpdf-chinese-traditional安装完后打开pdf文档,如果发现仍然是乱码,进行第二步,安装安装poppler-data:从8.04开始,源中开始提供poppler-data安装包的支持,可以直接输入命令sudo apt-get install poppler-data安装sudo make install datadir=/usr/share在我这里,上一步安装完成后打开pdf文档发现中文乱码都变成方块了,于是进行第三步,删除字体sudo rm /etc/ 阅读全文
posted @ 2010-12-17 15:00 flyxiang 阅读(500) 评论(0) 推荐(0)
摘要: vi编辑器是所有Unix及Linux系统下标准的编辑器,他的强大不逊色于所有最新的文本编辑器,这里只是简单地介绍一下他的用法和一小部分指令。由于对Unix及Linux系统的所有版本,vi编辑器是完全相同的,因此你能在其他所有介绍vi的地方进一步了解他。Vi也是Linux中最基本的文本编辑器,学会他后,你将在Linux的世界里畅行无阻。1、vi的基本概念  基本上vi能分为三种状态,分别是命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode),各模式的功能区分如下: 1) 命令行模式command mode)  控制屏幕光标的移动,字 阅读全文
posted @ 2010-12-17 14:59 flyxiang 阅读(171) 评论(0) 推荐(0)
摘要: 1. 备份系统我该如何备份我的Ubuntu系统呢?很简单,就像你备份或压缩其它东西一样,使用TAR。和Windows不同,Linux不会限制root访问任何东西,你可以把分区上的所有东西都扔到一个TAR文件里去!首先成为root用户:$ sudo su然后进入文件系统的根目录(当然,如果你不想备份整个文件系统,你也可以进入你想要备份的目录,包括远程目录或者移动硬盘上的目录):# cd /下面是我用来备份系统的完整命令:# tar cvpzf backup.tgz –exclude=/proc –exclude=/lost+found –exclude=/backup.tgz –exclude= 阅读全文
posted @ 2010-12-17 14:58 flyxiang 阅读(462) 评论(0) 推荐(1)
摘要: shell 编程中使用到得if语句内判断参数   –b 当file存在并且是块文件时返回真  -c 当file存在并且是字符文件时返回真  -d 当pathname存在并且是一个目录时返回真  -e 当pathname指定的文件或目录存在时返回真  -f 当file存在并且是正规文件时返回真 -g 当由pathname指定的文件或目录存在并且设置了SGID位时返回为真  -h 当file存在并且是符号链接文件时返回真,该选项在一些老系统上无效  -k 当由pathname指定的文件或目录存在并且设置了“粘滞”位时返回真  -p 当file存在并且是命令管道时返回为真  -r 当由pathnam 阅读全文
posted @ 2010-12-17 14:53 flyxiang 阅读(241) 评论(0) 推荐(0)
摘要: 4. sed 附加/替换:sed "/xmdh/a\daoyou" file 把含有xmdh的行的结尾附加daoyou(有换行)sed 's/$/ daoyou/' file把每行的结尾附加daoyou(在同一行)sed '/test/s/$/ daoyou/' file把包含test行的结尾附加daoyou(在同一行)sed '10s/$/ daoyou/' file把第10行的结尾附加daoyou(在同一行)sed "s/xmdh/daoyou/g" file把xmdh替换成daoyoused"s/xmdh/daoyou/;G"file把xmdh替换成daoyou并增加一个换行cat us 阅读全文
posted @ 2010-12-17 14:52 flyxiang 阅读(308) 评论(0) 推荐(0)
摘要: shell入门基础  1.建立和运行shell程序什么是shell程序呢? 简单的说shell程序就是一个包含若干行shell 或者linux命令的文件.象编写高级语言的程序一样,编写一个shell程序需要一个文本编辑器.如VI等.在文本编辑环境下,依据 shell的语法规则,输入一些shell/linux命令行,形成一个完整的程序文件.执行shell程序文件有三种方法(1)#chmod +x file(2)#sh file(3)# . file在编写shell时,第一行一定要指明系统需要那种shell解 释你的shell程序,如:#! /bin/bash,#! /bin/csh,/bin/t 阅读全文
posted @ 2010-12-17 14:51 flyxiang 阅读(204) 评论(0) 推荐(0)
摘要: IP 协议是在网络层的协议.它主要完成数据包的发送作用. 下面这个表是 IP4 的数据包格式0 4 8 16 32--------------------------------------------------|版本 |首部长度|服务类型| 数据包总长 |--------------------------------------------------| 标识 |DF |MF| 碎片偏移 |--------------------------------------------------| 生存时间 | 协议 | 首部较验和 |----------------------------- 阅读全文
posted @ 2010-12-17 14:50 flyxiang 阅读(676) 评论(0) 推荐(0)
摘要: 服务器端程序的编译gcc -o file_server file_server.c客户端程序的编译gcc -o file_client file_client.c服务器程序和客户端程应当分别运行在2台计算机上.服务器端程序的运行,在一个计算机的终端执行./file_server客户端程序的运行,在另一个计算机的终端中执行./file_client 运行服务器程序的计算机的IP地址根据提示输入要传输的服务器上的文件,该文件在服务器的运行目录上在实际编程和测试中,可以用2个终端代替2个计算机,这样就可以在一台计算机上测试网络程序,服务器端程序的运行,在一个终端执行./file_server客户端程 阅读全文
posted @ 2010-12-17 14:36 flyxiang 阅读(529) 评论(0) 推荐(0)
摘要: 编译方式:gcc -pthread -o chat_server chat_server.c#include pthread.h#include sys/errno.h#include "chat.h"#define LENGTH_OF_LISTEN_QUEUE (20)#define USER_AMOUNT_MAX (50)#define NOT_LOGIN (-1)#define NOT_IN_USE (NOT_LOGIN -1)#define USER_ID_SIZE (ID_SIZE)typedef struct user{ char user_ID[USER_ID_SIZE] 阅读全文
posted @ 2010-12-17 14:33 flyxiang 阅读(752) 评论(0) 推荐(1)
摘要: 编译方式:gcc -o chat_client chat_client.c#include "chat.h"#include unistd.h // for fork#include sys/signal.h // for signal#include sys/wait.h // for wait#include fcntl.hstatic char user_ID[BUFFER_SIZE]; //一个很大的缓冲区,实际ID_SIZE内有效static char password[BUFFER_SIZE]; //一个很大的缓冲区,实际PASSWORD_SIZEE内有效stati 阅读全文
posted @ 2010-12-17 14:32 flyxiang 阅读(624) 评论(0) 推荐(0)
摘要: 服务器端的实现:#include sys/types.h#include sys/socket.h#include netinet/in.h//sockaddr_in等结构的定义#include netdb.h//addrinfo等结构的定义#include stdio.h#include unistd.h#include dirent.h#include string.h#include sys/stat.h#include fcntl.h#include stdlib.h#define TRUE 1#define LISTEN_PORT 3499 阅读全文
posted @ 2010-12-17 14:27 flyxiang 阅读(874) 评论(0) 推荐(0)
摘要: 学习了LINUX下用C语言遍历文件夹,一些心得struct dirent中的几个成员:d_type:4表示为目录,8表示为文件d_reclen:16表示子目录或文件,24表示非子目录经过本人亲自试验发现:d_reclen:16表示子目录或以.开头的隐藏文件,24表示普通文本文件,28为二进制文件,等等d_name:目录或文件的名称具体代码如下,仅供参考#include stdio.h#include dirent.h#include sys/stat.hvoid List(char *path){ struct dirent* ent = NULL; DIR *pDir; pDir 阅读全文
posted @ 2010-12-17 14:15 flyxiang 阅读(6629) 评论(0) 推荐(0)
摘要: 刚才转载了一篇文章《情景分析“C语言的const关键字”》,csdn上也有一篇《Const用 法小结》,可能很多人看了这两篇文章之后就对const绝望了,太复杂了。其实const并不复杂,它是有规则的,不然设计语言的语法就不好弄了(大家看 一下编译原理就好理解了)。下面就说一下我对const的理解:我觉得,语言里面的关键字,都有一个修饰域(即这个关键字修饰那块范围),还有一个修饰方向(即从 那里开始修饰)。对于c类似的语言(c,c++,java),关键字的修饰方向都是从向右的,即关键字不会修饰它左边的东西。从编译原理的角度就好理解为 什么这样了,我们现在编译器采用的基本都是LR(k)进行语法分 阅读全文
posted @ 2010-12-17 12:46 flyxiang 阅读(442) 评论(0) 推荐(1)
摘要: 1) #define是预处理指令,在编译预处理时进行简单的替换,不作正确性检查,不关含义是否正确照样带入,只有在编译已被展开的源程序时才会发现可能的错误并报错。例如: #define PI 3.1415926 程序中的:area=PI*r*r 会替换为3.1415926*r*r 如果你把#define语句中的数字9 写成字母g 预处理也照样带入。 2)typedef是在编译时处理的。它在自己的作用域内给一个已经存在的类型一个别名,但是You cannot use the typedef specifier inside a function definition。 3)typedef int 阅读全文
posted @ 2010-12-17 12:45 flyxiang 阅读(224) 评论(0) 推荐(0)
摘要: 三个函数的申明分别是:void* realloc(void* ptr, unsigned newsize);void* malloc(unsigned size);void* calloc(size_t nelem, size_t elsize);都在stdlib.h函数库内它们的返回值都是请求系统分配的地址,如果请求失败就返回NULLmalloc用于申请一段新的地址,参数size为需要内存空间的长度,如:char* p;p=(char*)malloc(20);calloc与malloc相似,参数nelem为申请地址的单位元素长度,elsize为元素个数,如:char* p;p=(char*) 阅读全文
posted @ 2010-12-17 12:42 flyxiang 阅读(470) 评论(0) 推荐(0)
摘要: 1.这样的初始化有什么问题?char *p = malloc(10); 编译器提示“非法初始式” 云云。答:这个声明是静态或非局部变量吗?函数调用只能出现在自动变量(即局部非静态变量) 的初始式中。因为静态变量的地址必须在编译的过程中就确定下来而malloc()申请的内存地址是在运行时确定的。2. *p++ 自增p 还是p 所指向的变量?答:后缀++ 和-- 操作符本质上比前缀一目操作的优先级高, 因此*p++ 和*(p++) 等价, 它自增p 并返回p 自增之前所指向的值。要自增p 指向的值, 使用(*p)++, 如果副作用的顺序无关紧要也可以使用++*p。3 我有一个char * 型指针正 阅读全文
posted @ 2010-12-17 12:40 flyxiang 阅读(180) 评论(0) 推荐(0)
摘要: linux下用C开发多线程程序,Linux系统下的多线程遵循POSIX线程接口,称为pthread。Returns: 0 if OK, error number on failureC99 中新增加了 restrict 修饰的指针: 由 restrict 修饰的指针是最初唯一对指针所指向的对象进行存取的方法,仅当第二个指针基于第一个时,才能对对象进行存取。对对象的存取都限定于基于由 restrict 修饰的指针表达式中。 由 restrict 修饰的指针主要用于函数形参,或指向由 malloc() 分配的内存空间。restrict 数据类型不改变程序的语义。 编译器能通过作出 restrict 阅读全文
posted @ 2010-12-17 12:36 flyxiang 阅读(563) 评论(0) 推荐(0)
摘要: linux 系统中单个进程的最大线程数有其最大的限制 PTHREAD_THREADS_MAX这个限制可以在 /usr/include/bits/local_lim.h 中查看对 linuxthreads 这个值一般是 1024,对于 nptl 则没有硬性的限制,仅仅受限于系统的资源这个系统的资源主要就是线程的 stack 所占用的内存,用 ulimit -s 可以查看默认的线程栈大小,一般情况下,这个值是 8M可以写一段简单的代码验证最多可以创建多少个线程int main(){int i = 0;pthread_t thread;while (1) {if (pthread_create(&t 阅读全文
posted @ 2010-12-17 12:35 flyxiang 阅读(780) 评论(0) 推荐(0)
摘要: socket()——生成socket句柄#include sys/types.h; #include sys/socket.h; int socket(int domain, int type, int protocol); domain : "AF_INET"type : SOCK_STREAM(TCP), SOCK_DGRAM (UDP)protocol:0返回值:socket句柄(整型);(注意:有很多种 domain、type,请看 socket() 的 man帮助。另一个方式去得到 protocol。同 时请查阅 getprotobyname() 的 man 帮助。)int 阅读全文
posted @ 2010-12-17 12:32 flyxiang 阅读(802) 评论(0) 推荐(0)
摘要: #include stdio.hint printf( const char *format, ... );printf()函数根据format(格式)给出的格式打印输出到STDOUT(标准输出)和其它参数中. 字符串format(格式)由两类项目组成 - 显示到屏幕上的字符和定义printf()显示的其它参数. 基本上, 你可以指定一个包含文本在内的format(格式)字符串,也可以是映射到printf()其它参数的"特殊"字符. 例如本代码 char name[20] = "Bob";int age = 21;printf( "Hello %s, you are %d years ol 阅读全文
posted @ 2010-12-17 12:31 flyxiang 阅读(2235) 评论(0) 推荐(0)
摘要: 先是建立服务器程序:#include stdio.h#include stdlib.h#include string.h#include netinet/in.h#include sys/socket.h#include unistd.h#include sys/types.h#define MYPORT 5858#define BACKLOG 10#define MAXSIZE 80#define BUFSIZE 100//单独的数据处理 就是简单的从client端接受数据, 然后又发给client端void str_ser(int new_fd) {char b 阅读全文
posted @ 2010-12-17 12:29 flyxiang 阅读(1666) 评论(0) 推荐(0)
摘要: 环境,虚拟机 VirtualBox, 系统Ubuntu9.0.4 编译环境gcc 4.4.0今天看到一个比较常用的函数 fork,用于创造子进程,首先接触到下面的这个函数#include unistd.h;#include sys/types.h; main () { pid_t pid; pid=fork(); if (pid 0) printf("error in fork!"); else if (pid == 0) printf("i am the child process, my process id is %dn",getpid()); else printf("i 阅读全文
posted @ 2010-12-17 12:04 flyxiang 阅读(480) 评论(0) 推荐(0)
摘要: 今天学习了一下pipe管道,用于父子或者相关联的两个进程之间的通讯,pipe使用 pipe()函数建立,必须用于fork建立的进程中,并且需要在fork之前调用,否则是没有效果的,下面是一个例子和用法说明#include unistd.h#include sys/types.h //系统数据类型头文件#include errno.h //出错类型头文件#include stdio.h //标准输入输出 #include stdlib.h //标准系统库int main(void){int pipe_fd[2]; //创建管道描述符,其中pipe_fd[0]为接收描述符,pi 阅读全文
posted @ 2010-12-17 12:03 flyxiang 阅读(812) 评论(0) 推荐(0)
摘要: 标准管道流,用于文件流模式popen();原型 FILE *popen(char *command,char *type);//如果调用成功,则返回一个文件流,如果无法创建则返回NULL,该函数主要用于执行外部程序// command 参数是一个指向以 NULL 结束的 shell 命令字符串的指针。//其中type参数是用来表示读或者写的,不能同时为读和写,管道将会以参数type的第一个字符代表的方式打开//popen打开的数据管道流可以使用pclose()关闭, popen,pclose用于打开和关闭数据流//如果pclose(FILE *stream)调用失败,则返回-1;注意,在使用p 阅读全文
posted @ 2010-12-17 12:02 flyxiang 阅读(704) 评论(0) 推荐(0)
摘要: 信号通讯采用raise发送信号#include stdio.h#include stdlib.h#include signal.h#include sys/types.h#include sys/wait.hint main(){pid_t pid; //建立进程IDint ret;if((pid=fork())0){//创建子进程出错,出错处理 }if(pid==0){//子进程中raise(SIGSTOP); //子进程发送一个信号//终止信号exit(0); //子进程退出 }else{printf("pid=%d\n",pid);if(waitpid(pid,SI 阅读全文
posted @ 2010-12-17 12:01 flyxiang 阅读(592) 评论(0) 推荐(0)
摘要: 共享内存共享内存是可以被多个进程共享访问的一部分物理内存,如果多个进程都把一个内存区映射到自身的虚拟地址空间,则这些进程就可以直接访问该共享的内存区域,从而通过共享内存的方式实现多进程间的通讯,共享内存是进程间数据通讯的最快方法.共享内存的实现分为两步:1,创建共享内存,使用shmget函数2,映射共享内存,将创建的共享内存映射到具体的进程空间中去,使用shmat函数int shmget(key_t key,int size,int shmflg); //用于创建一个共享内存共享内存对象的创建或获得。与其它IPC机制一样,进程在使用共享内存区域以前,必须通过系统调用sys_ipc (call值 阅读全文
posted @ 2010-12-17 12:00 flyxiang 阅读(735) 评论(0) 推荐(0)
摘要: 守护进程在linux系统的控制台下敲击 ps -A命令 或者 ps -e命令我们可以看到当前系统的前后台进程,凡是最后一个字符为d的进程都为守护进程,例如smbd,vsftpd,maild,telnetd等等守护进程是没有控制终端的,终端名称都为?,所有守护进程的父进程都是init进程下面创造一个守护进程例子#include stdio.h#include stdlib.h#include string.h#include fcntl.h#include sys/types.h#include unlstd.h#include sys/wait.h#define M 阅读全文
posted @ 2010-12-17 12:00 flyxiang 阅读(457) 评论(0) 推荐(0)
摘要: 使用new和delete进行动态内存分配和释放运算符new和delete是C++新增的运算符,提供了存储的动态分配和释放功能。它的作用相当于C语言的函数malloc()和free(),但是性能更为优越。使用new较之使用malloc()有以下的几个优点:(1)new自动计算要分配类型的大小,不使用sizeof运算符,比较省事,可以避免错误。(2)自动地返回正确的指针类型,不用进行强制指针类型转换。(3)可以用new对分配的对象进行初始化。使用例子:(1)int* p;p=new int[10]; //分配一个含有10个整数的整形数组delete[] p; //删除这个数组(2)int* p;p 阅读全文
posted @ 2010-12-17 11:59 flyxiang 阅读(185) 评论(0) 推荐(0)
摘要: 我们在Linux环境下开发程序,少不了要自己编写Makefile,一个稍微大一些的工程下面都会包含很多.c的源文 件。如果我们用gcc去一个一个编译每一个源文件的话,效率会低很多,但是如果我们可以写一个Makefile,那么只需要执行一个make就OK了,这 样大大提高了开发效率。但是Makefile的语法规则众多,而且缺乏参考资料,对于初学者来说,写起来还是有一定的难度,往往令很多人望而生畏。下面我 们介绍一个比较通用而且简洁的Makefile,大家只要对它稍作修改就可以用在你们自己的工程里了。现在假设我们有一个工程叫my_project,工程源码目录下面有app1.c,app2.c,app 阅读全文
posted @ 2010-12-17 11:50 flyxiang 阅读(354) 评论(0) 推荐(0)
摘要: Online PDF Converter & Document Creator: 非常非常强大的一个PDF在线转换工具,支持包括CSV、DCX、DIB、EMF、FPX、GIF87、JP2、MIFF、BMP、DOC、DOCX、 DOT、EPS、FAX、GIF、HTM、HTML、ICO、JNT、JPEG、JPG、LOG等75种格式在内的文件直接转换成PDF格式。RSS to PDF Newspaper:输入RSS地址之后就可以把 RSS 上的内容直接转换为 PDF 格式,非常实用,转换结果可直接下载。可以用它来替代网页截图的软件;) 唯一的遗憾是不支持中文。PDF to Excel:看名字就知道了 阅读全文
posted @ 2010-12-17 11:47 flyxiang 阅读(393) 评论(0) 推荐(1)
摘要: /************** * readtest.c * **************/#include unistd.h#include sys/types.h#include errno.hmain(){int pipe_fd[2];int pipe_fd2[2];pid_t pid;char r_buf[100];char w_buf[4];char* p_wbuf;int r_num;int cmd;memset(r_buf,0,sizeof(r_buf));memset(w_buf,0,sizeof(w_buf));p_wbuf=w_buf;if(pipe(pipe_ 阅读全文
posted @ 2010-12-17 11:30 flyxiang 阅读(993) 评论(0) 推荐(0)
摘要: void *memset(void *s,int c,size_t n) 总的作用:将已开辟内存空间 s 的首 n 个字节的值设为值 c。例子 :main(){ char *s="Golden Global View"; clrscr(); //clear screenmemset(s,'G',6); printf("%s",s); getchar(); return 0; } memset() 函数常用于内存空间初始化。如: char str[100]; memset(str,0,100); memset()的深刻内涵:用来对一段内存空间全部设置为某个字符,一般用在对定义的字符串进行初始化为 阅读全文
posted @ 2010-12-17 11:29 flyxiang 阅读(345) 评论(0) 推荐(0)
摘要: system(执行shell 命令)相关函数fork,execve,waitpid,popen表头文件#i ncludestdlib.h定义函数int system(const char * string);函数说明system()会调用fork()产生子进程,由子进程来调用/bin/sh-c string来执行参数string字符串所代表的命令,此命令执行完后随即返回原调用的进程。在调用system()期间SIGCHLD 信号会被暂时搁置,SIGINT和SIGQUIT 信号则会被忽略。返回值=-1:出现错误 =0:调用成功但是没有出现子进程 0:成功退出的子进程的id如果system 阅读全文
posted @ 2010-12-17 11:27 flyxiang 阅读(260) 评论(0) 推荐(0)
摘要: 最近在做一个在开发板启动后,程序运行前首先检查一下网络是否已经连通的东西。参考了网上的一些方法,现在整理一下。(使用system(ping IPaddress)也可以办到) 其实问题的关键是,如何设置connect函数能够在指定的时间内返回。如果直接connect一个IP地址,不成功的话将会是一个漫长的等待时间。测试了一下2分钟内没有反映,但是网上有人说是75秒,还需要进一步确认啊!过程如下:(1)调用fcntl,将socket置为非阻塞模式; (2)connect(); (3)判断connect()的返回值,一般情况会返回-1,这时你还必须判断错误码如果是EINPROGRESS,那说明co 阅读全文
posted @ 2010-12-17 11:21 flyxiang 阅读(2343) 评论(0) 推荐(0)
摘要: printf输出颜色和ANSI控制码(高亮,下划线,闪烁,光标位置,清屏等)给printf的输出加上些特效比如颜色,可以让打印信息更鲜明,在debug的时候特别有用。颜色:#define NONE "\033[m"#define RED "\033[0;32;31m"#define LIGHT_RED "\033[1;31m"#define GREEN "\033[0;32;32m"#define LIGHT_GREEN "\033[1;32m"#define BLUE "\033[0;32;34m"#define LIGHT_BLUE "\033[1;34m"#define DARY_GRA 阅读全文
posted @ 2010-12-17 11:20 flyxiang 阅读(733) 评论(0) 推荐(0)
摘要: //基于fork()系统调用//#include "sys/types.h"//包含pid_t等的声明//#include "sys/file.h"//#include "unistd.h"//包含pipe(),fork()等的声明 /*在一般的较新的linux系统(如Ubuntu)中,以上头文件的引入不是必须的,用gcc编译时不会报error*//*如果出现关于pid_t的错误,可以包含以上头文件中任意一个,或者包含stdlib.h*//*如果出现类似于“不兼容的隐式声明”或“incompatible implicit declaration of built-in function *** 阅读全文
posted @ 2010-12-17 11:18 flyxiang 阅读(958) 评论(0) 推荐(0)
摘要: 最近学习了linux的多线程,就写了个测试处理器多线程性能的例子,里面用到了 线程,信号量,互斥锁等,写得比较麻烦,呵呵,但是整体思路用来学习还是不错的.里面多由详细的中文注释;#include stdio.h#include unistd.h#include stdlib.h#include pthread.h#include time.h#include sys/time.h#include semaphore.h#include string.h#include sys/wait.h#define TEST1_NUM 10000 //第一个测试建立的线 阅读全文
posted @ 2010-12-17 11:15 flyxiang 阅读(408) 评论(0) 推荐(0)
摘要: 相关函数:scandir, opendir, readdir, alphasort表头文件:#includedirent.h定 义函数:intscandir(const char *dir, struct dirent **namelist, nt (*select)(conststructdirent *), nt (*compar)(const struct dirent **, const struct dirent**));函数说明:scandir()会扫描参数dir指定的目录文件,经由参 数select指定的函数来挑选目录结构至参数namelist数组中,最后再调用参数compa 阅读全文
posted @ 2010-12-17 11:13 flyxiang 阅读(672) 评论(0) 推荐(1)
摘要: 如何利用多进程,来实现文件的拷贝?在我们学习IO的时候,曾经利用文件IO函数,标准IO函数都实现了对文件的拷贝,那么在我们学习过进程间通信后,就可 以创建多个进程来完成对同一个文件的读写。例如让父进程写文件的前半部分,子进程来写文件的后半部分,因为两个进程间是可以并发执行的,所以将会节约一部 分时间,提高执行的效率。那么怎样才能实现这个功能?我们以文件IO为例,边讲述如何实现的同时,也给大家说下为什么这样写的原因,希望能给大家得到些启发。首先来看下用文件IO函数实现拷贝文件的程序:#include sys/types.h#include sys/stat.h#include fcnt 阅读全文
posted @ 2010-12-17 11:10 flyxiang 阅读(767) 评论(0) 推荐(0)
摘要: select需要驱动程序的支持,驱动程序实现fops内的poll函数。select通过每个设备文件对应的poll函数提供的信息判断当前是否有资源 可用(如可读或写),如果有的话则返回可用资源的文件描述符个数,没有的话则睡眠,等待有资源变为可用时再被唤醒继续执行。下面我们分两个过程来分析select:1. select的睡眠过程支持阻塞操作的设备驱动通常会实现一组自身的等待队列如读/写等待队列用于支持上层(用户层)所需的BLOCK或NONBLOCK操作。当应用程序通过设 备驱动访问该设备时(默认为BLOCK操作),若该设备当前没有数据可读或写,则将该用户进程插入到该设备驱动对应的读/写等待队列让 阅读全文
posted @ 2010-12-17 11:08 flyxiang 阅读(487) 评论(0) 推荐(0)