Linux C编程
yuhai8702
这个作者很懒,什么都没留下…
展开
-
mycp
/*2010-09-14*//*1 实现一个mycp,功能如同cp 例如: ./mycp /etc/passwd /tmp/passwd*//* *打开要被复制的文件1,同时创建一个新的文件2,读文件1到BUF,然后将BUF的内 *容写到文件2 * */#include #include #include #include int main(int argc,char** argv){ if(argc!=3) { perror("argc"); exit(1);原创 2010-09-14 20:35:00 · 1055 阅读 · 0 评论 -
守护进程
守护进程1、setpgid一般用不着2、一个进程只能为它自己或其子进程修改进程组3、会话-----多个进程组的集合4、setsid-----进程组的组长不能setsid5、守护进程没有控制台ps -axj服务器应该是一个守护进程(LANQQ)守护进程最大的特点是不占用终端/*damon.c*//*守护进程*/#include #include #include #include int daemonize(int n原创 2010-10-06 10:35:00 · 534 阅读 · 0 评论 -
高级I/O
高级I/O一、主要函数:select,poll,epoll,readv,writev二、1、select,poll,epoll的作用就是监视多个I/O.如果不希望被某些信号打断可用pselect,ppoll.2、select每次用select之前都要构造一下。当监视读一个写端关闭的进程时,select总是能返回。3、pollPOLLIN 读,POLLOUT写struct pollfd fds[2];nfds = 2;fds[0].fd = 0;fds[0].events = POLLIN;fds[1].fd原创 2010-10-06 10:26:00 · 768 阅读 · 0 评论 -
进程间通信
进程间通信一、主要函数:pipe();msgsnd();msgrcv();二、1、管道:pipe()一切设备皆文件管道属于内核,是内核的一片内存,fork不会有这样的内存管道没有数据时会阻塞。一旦数据被从管道里读出来,那么管道里就没有这个数据了。管道的数据,读完了就没有了,不像文件。管道pipe要在fork之前2、fifo1)用mkfifo创建一个fifo文件"saif" fifo也是有大小限制的,最大为65536,如果没有数据也会阻塞 注:尽量少用fifo2)/*如果写端已关闭,那么读端不再阻塞,会跟原创 2010-10-05 17:09:00 · 984 阅读 · 0 评论 -
进程
进程一、主要函数:fork();wait();waitpid();exec家族;system(); 其它函数:getppid();getrlimit();atexit();strtok();getline();二、1、fork()用于创建一个子进程 1)父进程中,在fork之后修改全局变量的值,不会影响到其子进程的变量 2)子进程中修改变量的值并不影响父进程不该变量的值,即使这个变量为全局变量 3)一般父进程先执行。 4)但是,父、子对文件的操作是互相影响的.#include #include #in原创 2010-10-05 16:35:00 · 545 阅读 · 0 评论 -
文件I/O
文件I/O一、主要函数:open(),creat(),read(),write(),close(),fcntl(),lseek()二、open,creat,read,write,close等函数的操作与文件描述符fd有关。1、对于open函数而言,仅当创建新文件时才使用第三个参数,由open返回的文件描述符一定是最小的未用描述符数值,常用的常量有O_CREAT,O_TRUNC,O_NONBLOCK,常用open函数代替creat2、lseek成功执行,返回新的文件偏移量(相对于文件头0所偏移的量);比较ls原创 2010-10-05 16:06:00 · 683 阅读 · 0 评论 -
文件锁
文件锁一、主要函数:fcntl二、读锁是共享锁,读排斥写F_SETLKW是F_SETLK的一个阻塞版本(SEEK_SET,0,0)锁整个文件l_len要么是0,要么大于0l_type 只能由自己修改F_GETLK测试一把锁注意:子进程不继承文件锁用锁的时候,不要用标准I/O(fread,fwrite),应用read,write死锁:系统遇见死锁,它会选择一个进程退出,退出的这个进程一般是最后一次加锁失败引起死锁的那个进程kill(pid,SIGINT)原创 2010-10-06 10:37:00 · 777 阅读 · 0 评论 -
信号
信号一、主要函数:signal();alarm();pause();setitimer();sigprocmask();sigaction();二、kill -l 列出当前支持的信号不存在编号为0的信号普通信号不排队,实时信号排队(但一般我们用不着) 异种信号允许嵌套,那一个未完也可嵌入另一个; 同种信号不允许嵌套,同种信号不排队,所以为了防止信号丢失,信号处理一定要快。1、signal对信号的处理有三种方式:1)捕捉信号,signal(SIGINT,sig_handler); void sig_h原创 2010-10-05 16:51:00 · 779 阅读 · 0 评论 -
加密
加密一、主要函数:crypt();二、1、注意:crypt加密,GCC编译时要加上参数-lcrypt2、char *res = (char *)crypt(argv[1], "abc");三、例程:1、/*crypt.c*/#include #include int main(int argc, char **argv){ char *res = (char *)crypt(argv[1], "abc"); printf("%s/n", res);原创 2010-10-05 16:18:00 · 551 阅读 · 0 评论 -
mmap函数的使用
<br />UNIX网络编程第二卷进程间通信对mmap函数进行了说明。该函数主要用途有三个:<br />1、将一个普通文件映射到内存中,通常在需要对文件进行频繁读写时使用,这样用内存读写取代I/O读写,以获得较高的性能;<br />2、将特殊文件进行匿名内存映射,可以为关联进程提供共享内存空间;<br />3、为无关联的进程提供共享内存空间,一般也是将一个普通文件映射到内存中。<br />函数:void *mmap(void *start,size_t length,int prot,int flags,i转载 2010-10-05 10:42:00 · 437 阅读 · 0 评论 -
多线程
多线程-、主要函数:二、1、cpu调度的基本单位是线程。线,进程对于kernel而言没有什么区别,在内核里有相应的task_struct(任务描述符) 线程与进程:1)调度一样2)线程的创建成本会快一些2、线程,地址空间是共享的pthread_self();pthread_create();pthread_exit(NULL);pthread_join(tid,NULL);创建多个线程: pthread tid[5] ; pthread_create(tid+i,原创 2010-10-06 10:38:00 · 513 阅读 · 0 评论 -
时间和日期
时间和日期一、主要函数:time();ctime();strftime();localtime();gettimeofday();二、/*2010-09-18*//*时间和日期*//*time()返回值是以秒为单位的,ctime()以固定的格式输出时间日期,strftime()可以按照某种格式打印,也就是自定义打印格式。localtime()返回符合认知的时间,gettimeofday()可以精确到微秒。*/#include #include #include #include typedef long l原创 2010-10-05 16:12:00 · 730 阅读 · 0 评论 -
文件和目录
文件和目录一、主要函数:access();dup();dup2();opendir();readdir();closedir();mkdir();chdir();stat();lstat();sprintf();strstr();bzero();truncate();link();unlink();symlink(),readlink();rename();rename();二、1、access用于测试对文件的访问权限,比如说测试某个文件是否可读:access(“file.txt”,R_OK),若成功则返回原创 2010-10-05 15:12:00 · 505 阅读 · 0 评论 -
(myls)模拟" ls "命令
/*2010-09-16*//*模拟" ls "命令*//*myls*/#include #include #include #include #include #include #include #include void myls(const char* path){ const char* savepath=path; char BUF[500]; struct stat buf; int ret; bzero(BUF,500); ret=lstat(path,&b原创 2010-09-16 20:50:00 · 3996 阅读 · 0 评论 -
网络编程
<br />1、端口号是用来区分用户程序的。<br />2、其实,只要撑握了UNIX域的编程,那么网络编程就显得简单了。<br />3、UNIX域:UDP 和 TCP<br /> 网络: UDP 和 TCP<br />4、下面是相关的例程:<br />一、首先是UNIX域的编程:<br />1、C<br />/*UNIX域:UDP_client*/<br />#include <sys/socket.h><br />#include <sys/types.h><br />原创 2010-10-18 15:25:00 · 648 阅读 · 0 评论