linux操作系统下c语言编程入门--线程操作

文章作者 100test 发表时间 2007:09:11 11:57:02
来源 100Test.Com百考试题网


线程的创建和使用

线程的创建是用下面的几个函数来实现的.

#include
int pthread_create(pthread_t *thread,pthread_attr_t *attr,
void *(*start_routine)(void *),void *arg).
void pthread_exit(void *retval).
int pthread_join(pthread *thread,void **thread_return).

pthread_create创建一个线程,thread是用来表明创建线程的ID,attr指出线程创建时候的属性,我们用NULL来表明使用缺省属性.start_routine函数指针是线程创建成功后开始执行的函数,arg是这个函数的唯一一个参数.表明传递给start_routine的参数. pthread_exit函数和exit函数类似用来退出线程.这个函数结束线程,释放函数的资源,并在最后阻塞,直到其他线程使用pthread_join函数等待它.然后将*retval的值传递给**thread_return.由于这个函数释放所以的函数资源,所以retval不能够指向函数的局部变量. pthread_join和wait调用一样用来等待指定的线程. 下面我们使用一个实例来解释一下使用方法.在实践中,我们经常要备份一些文件.下面这个程序可以实现当前目录下的所有文件备份.备份后的后缀名为bak

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define BUFFER 512
struct copy_file {
int infile.
int outfile.
}.
void *copy(void *arg)
{
int infile,outfile.
int bytes_read,bytes_write,*bytes_copy_p.
char buffer[BUFFER],*buffer_p.
struct copy_file *file=(struct copy_file *)arg.
infile=file->infile.
outfile=file->outfile.
/* 因为线程退出时,所有的变量空间都要被释放,所以我们只好自己分配内存了 */
if((bytes_copy_p=(int *)malloc(sizeof(int)))==NULL) pthread_exit(NULL).
bytes_read=bytes_write=0.
*bytes_copy_p=0.
/* 还记得怎么拷贝文件吗 */
while((bytes_read=read(infile,buffer,BUFFER))!=0)
{
if((bytes_read==-1)&.&.(errno!=EINTR))break.
else if(bytes_read>0)
{
buffer_p=buffer.
while((bytes_write=write(outfile,buffer_p,bytes_read))!=0)
{
if((bytes_write==-1)&.&.(errno!=EINTR))break.
else if(bytes_write==bytes_read)break.
else if(bytes_write>0)
{
buffer_p =bytes_write.
bytes_read-=bytes_write.
}
}
if(bytes_write==-1)break.
*bytes_copy_p =bytes_read.
}
}



相关文章


基于2.6.19内核小型Linux系统制作与移植
Linux中的全能媒体播放软件XINE
Linux系统下配置静态IP上网
Linux下以太网卡的安装及配置
linux操作系统下c语言编程入门--线程操作
编写可移植C_C 程序的要点
Linux操作系统修改默认的Mount分区的方法
Linux和WindowsXP之间使用FTP互传文件
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛