linux程序设计
zhangqing1001
这个作者很懒,什么都没留下…
展开
-
linux fork函数与vfork函数
一、fork1. 调用方法#include #include pid_t fork(void);正确返回:在父进程中返回子进程的进程号,在子进程中返回0错误返回:-1 子进程是父进程的一个拷贝。即,子进程从父进程得到了数据段和堆栈段的拷贝,这些需要分配新的内存;而对于只读的代码段,通常使用共享内存的方式访问。fork返回后,子进程和父进程都从调用fork函数返回转载 2013-04-13 20:26:51 · 443 阅读 · 0 评论 -
符号链接与硬链接的区别
Linux 文件系统最重要的特点之一是它的文件链接。链接是对文件的引用,这样您可以让文件在文件系统中多处被看到。不过,在 Linux 中,链接可以如同原始文件一样来对待。链接可以与普通的文件一样被执行、编辑和访问。对系统中的其他应用程序而言,链接就是它所对应的原始文件。当您通过 链接对文件进行编辑时,您编辑的实际上是原始文件。链接不是副本。有两种类型的链接:硬链接和符号链接。转载 2013-04-15 20:07:39 · 685 阅读 · 0 评论 -
关于SIGPIPE信号
我写了一个服务器程序,在Linux下测试,然后用C++写了客户端用千万级别数量的短链接进行压力测试. 但是服务器总是莫名退出,没有core文件.最后问题确定为, 对一个对端已经关闭的socket调用两次write, 第二次将会生成SIGPIPE信号, 该信号默认结束进程.具体的分析可以结合TCP的"四次握手"关闭. TCP是全双工的信道, 可以看作两条单工信道, TCP连接两端的两个原创 2014-02-10 16:49:12 · 524 阅读 · 0 评论 -
关于僵尸进程
在fork ()/execve()过程中,假设子进程结束时父进程仍存在,而父进程fork()之前既没安装SIGCHLD信号处理函数调用waitpid()等待子进程结束,又没有显式忽略该信号,则子进程成为僵尸进程,无法正常结束,此时即使是root身份kill -9也不能杀死僵尸进程。补救办法是杀死僵尸进程的父进程(僵尸进程的父进程必然存在),僵尸进程成为"孤儿进程",过继给1号进程init,init原创 2014-02-10 17:00:29 · 513 阅读 · 0 评论 -
Linux内核中的信号机制 从用户层到内核层
信号机制是类UNIX系统中的一种重要的进程间通信手段之一。我们经常使用信号来向一个进程发送一个简短的消息。例如:假设我们启动一个进程通过socket读取远程主机发送过来的网络数据包,此时由于网络因素当前主机还没有收到相应的数据,当前进程被设置为可中断等待状态(TASK_INTERRUPTIBLE),此时我们已经失去耐心,想提前结束这个进程,于是可以通过kill命令想这个进程发送KILL信号,内核会原创 2013-04-16 18:00:45 · 1946 阅读 · 0 评论 -
Linux下C语言实现多线程文件复制
1、具体思路把一个文件分成N份,分别用N个线程copy, 每个线程只读取指定长度字节大小的内容 最后一个线程的源文件所指定的结束位置是文件的实际大小 每个线程读取指定源文件部分的起始位置和结束位置的内容到缓冲区 每个线程将缓存中的内容写入目的文件的指定开始位置和结束位置 主线程必须等到所有线程copy完成后才能退出 2.有关文件操作的函数原创 2013-04-16 18:27:11 · 777 阅读 · 0 评论 -
Linux多线程──生产者消费者
生产者消费者问题这是一个非常经典的多线程题目,题目大意如下:有一个生产者在生产产品,这些产品将提供给若干个消费者去消费,为了使生产者和消费者能并发执行,在两者之间设置一个有多个缓冲区的缓冲池,生产者将它生产的产品放入一个缓冲区中,消费者可以从缓冲区中取走产品进行消费,所有生产者和消费者都是异步方式运行的,但它们必须保持同步,即不允许消费者到一个空的缓冲区中取产品,也不允许生产者向一个已经装满产原创 2013-04-16 18:34:35 · 461 阅读 · 0 评论 -
Linux静态库和动态库
库从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行。库分静态库和动态库两种。 静态库和动态库的区别1. 静态函数库 这类库的名字一般是libxxx.a;利用静态函数库编译成的文件比较大,因为整个 函数库的所有数据都会被整合进目标代码中,他的优点就显而易见了,即编译后的执行程序不需要外部的函数库支持,因为所有使用的函数都已经被编译进去了。当然这也会成为他的缺点,因原创 2013-04-16 17:43:25 · 502 阅读 · 0 评论 -
linux-多线程
一、什么是线程? 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。二、什么时候使用多线程? 当多个任务可以并行执行时,可以为每个任务启动一个线程。三、线程的创建转载 2013-04-15 19:40:23 · 452 阅读 · 0 评论 -
Linux C编程--打开和关闭流
以下函数用于打开和关闭一个流。#include FILE * fopen (const char *pathname, const char *opentype);int fclose (FILE *stream);FILE * freopen (const char *pathname, const char *opentype, FILE *stream);fopen(转载 2013-04-14 14:09:55 · 578 阅读 · 0 评论 -
exec函数族实例解析
fork()函数通过系统调用创建一个与原来进程(父进程)几乎完全相同的进程(子进程是父进程的副本,它将获得父进程数据空间、堆、栈等资源的副本。注意,子进程持有的是上述存储空间的“副本”,这意味着父子进程间不共享这些存储空间。linux将复制父进程的地址空间内容给子进程,因此,子进程有了独立的地址空间。),也就是这两个进程做完全相同的事。在fork后的子进程中使用exec函数族,可以装入和运行其转载 2013-04-13 20:36:56 · 552 阅读 · 0 评论 -
移植freetds连接sql server教程
移植freetds连接sql server教程一、 freetds介绍最近工作中项目需要嵌入式linux连接sql server数据库的要求,之前对sql server完全不了解,所以加强学习,经过半年的断断续续的开发学习,下面将自己你的经验总结一下。Freetds是一个开源的C程序库,是TDS(表列数据流)协议的再次实现,它可以被利用在Sybase的db-lib或者ct-lib库。原创 2014-10-18 10:57:31 · 2595 阅读 · 1 评论