资源简介
本人在工作用的到c语言进程多线程工作,和多线程实现文件传输的功能,就网上寻找一份,供大家参考

代码片段和文件信息
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define THREADS_COUNT 4
#define THREADS_BUFF_SIZE 1*1024
struct thread_block
{
int infd; ///源文件句柄
int outfd;//目的文件句柄
size_t start;///文件的写入起始位置
size_t end; ///文件写入的终止位置
};
void usage()
{
printf(“copy %%src %%dst\n“);
}
///获取文件大小
size_t get_filesize(int fd)
{
struct stat st;
fstat(fd&st);
return st.st_size;
}
void *thread_copy_fn(void *arg)
{
struct thread_block *block = (struct thread_block *)arg;
char buf[THREADS_BUFF_SIZE];
int ret;
size_t count = block->start;
printf(“In Thread\t%ld\nstart = %d\t end = %d\n“\
pthread_self()block->startblock->end);
///lseek到同样的位置
ret = lseek(block->infdblock->startSEEK_SET);
ret = lseek(block->outfdblock->startSEEK_SET);
int bytes_read;
int bytes_write;
while(count < block->end)
{
bytes_read = read(block->infdbufsizeof(buf));
if(bytes_read >0)
{
printf(“thread = %ld\t read = %d\t count %d\n“\
pthread_self()bytes_readcount);
count += bytes_read;
//read()返回-1,同时errno为EINTR,表示读的过程中遇到了中断
if((bytes_read == -1)&&(errno !=EINTR))
break;
char *ptr_write = buf;
while((bytes_write = write(block->outfdptr_writebytes_read))!=0)
{
//write()会返回-1,同时errno为EINTR,表示在写的过程中遇到了中断
if((bytes_write == -1)&&(errno!=EINTR))
break;
if(bytes_write == bytes_read)
break;
else if(bytes_write > 0)
{
ptr_write += bytes_write;
bytes_read -= bytes_write;
}
printf(“thread = %ld\t write = %d\t read %d\n“\
pthread_self()bytes_writebytes_read);
}//end-write;
///error while write
if(bytes_write == -1)
break;
}
}
printf(“#####Thread exit %ld#####\n“pthread_self());
pthread_exit(NULL);
}
int main(int argcchar *argv[])
{
if(argc < 3)
{
usage();
return -1;
}
///打开文件
int infd = open(argv[1]O_RDONLY);
int outfd = open(argv[2]O_CREAT|O_WRONLY0644);
// 0644也就是-文件所有者有读写权限,组有读权限,其他用户有读权限
if(infd == -1|| -1 ==outfd)
{
printf(“error while open file \n“);
return -1;
}
size_t file_size = get_filesize(infd);
size_t thread_size = THREADS_COUNT;
struct thread_block *blocks = (struct thread_block *)
malloc(sizeof(struct thread_block )* thread_size);
size_t percent = file_size / thread_size;
printf(“filesize = %d\t percent_blocks = %d\n“\
file_sizepercent);
int i = 0;
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 383 2014-06-11 17:00 C实现多线程下载源码\readme.txt.txt
文件 3911 2014-06-11 16:07 C实现多线程下载源码\thread_download.c
目录 0 2014-06-11 16:59 C实现多线程下载源码
----------- --------- ---------- ----- ----
4294 3
- 上一篇:水果专家系统
- 下一篇:使用微软蓝牙API的
相关资源
- 操作系统c语言模拟文件管理系统844
- C语言开发实战宝典
- C++中头文件与源文件的作用详解
- 基于mfc的多线程文件传输
- C++多线程网络编程Socket
- VC++ 多线程文件读写操作
- C语言代码高亮html输出工具
- 猜数字游戏 c语言代码
- C语言课程设计
- 数字电位器C语言程序
- CCS FFT c语言算法
- 使用C语言编写的病房管理系统
- 通信过程中的RS编译码程序(c语言)
- 计算机二级C语言上机填空,改错,编
- 用回溯法解决八皇后问题C语言实现
- 简易教务管理系统c语言开发文档
- 操作系统课设 读写者问题 c语言实现
- 小波变换算法 c语言版
- C流程图生成器,用C语言代码 生成C语
- 3des加密算法C语言实现
- 简单的C语言点对点聊天程序
- 单片机c语言源程序(51定时器 八个按
- 个人日常财务管理系统(C语言)
- c语言电子商务系统
- 小甲鱼C语言课件 源代码
- 将图片转换为C语言数组的程序
- C语言实现的一个内存泄漏检测程序
- DES加密算法C语言实现
- LINUX下命令行界面的C语言细胞游戏
- 用单片机控制蜂鸣器播放旋律程序(
评论
共有 条评论