下述demo将指定目录下文件存入vector,然后一分为二交给两个线程(threadTask1,threadTask2)去分别处理,对输出函数printDirent加锁防止紊乱。

#include <iostream>
#include <string>
#include <sys/types.h>
#include <dirent.h>
#include <unistd.h>
#include <stdio.h>
#include <fstream>
#include <iomanip>
#include <ctime>
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>
#include <list>
#include <numeric>
#include <algorithm>
#include <vector> static pthread_mutex_t testlock;
using namespace std;
void *threadTask1(void *ptr);
void *threadTask2(void *ptr);
typedef vector<dirent> VECTORDIRENT;
VECTORDIRENT listDirent;
VECTORDIRENT::iterator iter;
void printStr(string buff);
void printDirent(struct dirent ptrTest); void *threadTask1(void *ptr)
{
int vectorI=0;
int vectorLen = listDirent.size()/2;
int count=0;
for(;vectorI<vectorLen;vectorI++)
{
printDirent(listDirent[vectorI]);
count++;
}
} void *threadTask2(void *ptr)
{
int vectorI=listDirent.size()/2;
int vectorLen = listDirent.size();
int count=0;
for(;vectorI<vectorLen;vectorI++)
{
printDirent(listDirent[vectorI]);
count++;
}
} void printDirent(struct dirent ptrTest){
pthread_mutex_lock(&testlock);
cout<<ptrTest.d_name<<endl;
pthread_mutex_unlock(&testlock); } int main(void)
{
DIR *dirTest;
struct dirent *ptrTest;
string testFolderPathName = "/home/undoner/";
dirTest = opendir(testFolderPathName.data()); ///open the dir
int fileCount = 0;
while((ptrTest = readdir(dirTest)) != NULL) ///read the list of this dir
{
if(ptrTest->d_type==8){
listDirent.push_back(*ptrTest);
}
}
cout<<listDirent.size()<< endl;
cout<<"listDirent.begin()--- listDirent.end():"<<endl;
for (iter = listDirent.begin(); iter != listDirent.end(); ++iter) {
cout << iter->d_name << " ";
}
pthread_t thread1,thread2;
int ret1,ret2;
ret1=pthread_create(&thread1,NULL,threadTask1,NULL);
ret2=pthread_create(&thread2,NULL,threadTask2,NULL);
//ret3=pthread_create(&thread3,NULL,thread,NULL);
if(ret1!=0){
printf ("Create pthread error!\n");
exit (1);
}
if(ret2!=0){
printf ("Create pthread error!\n");
exit (1);
}
pthread_join(thread1,NULL);
pthread_join(thread2,NULL);
return 0;
}

linux C++多线程操作文件&输出加锁的更多相关文章

  1. Linux下多线程复制文件(C)

    Linux下实现多线程文件复制,使用<pthread.h>提供的函数: int pthread_create(pthread_t *thread,const pthread_attr_t ...

  2. linux exec操作文件描述符

    linux每一个打开文件都会关联一个文件描述符,需要的时候我们可以使用exec命令指定一个大于3的数字作为文件 linux默认文件描述符 每打开一个shell就会打开默认的三个文件描述符描0,1,2, ...

  3. Linux目录结构以及文件操作

    Linux目录结构 UNIX 是以目录为主的,Linux 也继承了这一优良特性. Linux 是以树形目录结构的形式来构建整个系统的,可以理解为树形目录是一个用户可操作系统的骨架.虽然本质上无论是目录 ...

  4. Linux基础命令之文件和目录操作(二)

    . find 用于查找目录下的文件,也可以调用其他命令使用 find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression] fi ...

  5. Linux C高级编程——文件操作之系统调用

    Linux C高级编程文件操作之系统调用 宗旨:技术的学习是有限的,分享的精神是无限的.           库函数是一些完毕特定功能的函数.一般由某个标准组织制作公布,并形成一定的标准.使用库函数编 ...

  6. linux c编程:文件的操作

    在Linux系统中,系统是通过inode来获得这个文件的信息.在Linux系统中,inode的信息都是封装在stat这个结构体中.可以通过man 2 stat来查看stat的具体结构.从中可以看到包含 ...

  7. 【转】【整理】将Linux脚本中的正常输出,警告,错误等信息输出到文件中

     本文来自:http://blog.csdn.net/woshinia/article/details/18040063   很早以前  编译的时候 就在用 2>&1,但是一直没有生成一 ...

  8. ubuntu chmod 无法更改 文件夹权限 系统提示“不允许的操作 2、linux 如何修改只读文件 3、ubuntu安装

    1.ubuntu chmod 无法更改 文件夹权限 系统提示“不允许的操作 答案:需要超级用户权限 sudo 2.linux 如何修改只读文件 答案:可以使用chmod命令,为改文件提供其他的权限.u ...

  9. java文件操作(输出目录、查看磁盘符)

    问题描述:     java操作文件,所有硬盘中所有文件路径 问题解决:     (1)查看所有磁盘文件 注:     如上所示,使用接口 File.listRoots()可以返回所有磁盘文件,通过f ...

随机推荐

  1. [bzoj4824][Cqoi2017]老C的键盘

    来自FallDream的博客,未经允许,请勿转载,谢谢. 老 C 是个程序员.     作为一个优秀的程序员,老 C 拥有一个别具一格的键盘,据说这样可以大幅提升写程序的速度,还能让写出来的程序在某种 ...

  2. Git常用命令及常见问题解决

    $ mkdir xxx       ----创建xxx目录 $ cd learngit     ----切到xxx目录下 $ pwd               ----查看当前文件所在目录 $ gi ...

  3. Angular 和 Vue 使用的对比总结 -- 脚手架

    前言 之前是用Vue的,现在由于工作原因,开始使用Angular.分别是Vue2和Angular5入的坑.只是从使用上来对比总结,加深记忆,避免混淆. 什么 ?  你问实现原理的异同及优劣? 本宝宝还 ...

  4. maven generating project in batch mode hang

    最新版已经自己就设置了 设置maven不要从远程服务器上获取catalog,增加参数-DarchetypeCatalog=internal 如何在idea里设置maven参数:

  5. JAVA中抽象类的使用

    抽象类是从多个具体类中抽象出来的父类,它具有更高层次的抽象.抽象类体现的就是一种模板模式的设计,抽象父类可以只定义需要使用的某些方法,把不能实现的某些部分抽象成抽象方法,留给其子类去实现.具体来说,抽 ...

  6. Codeforces Round #305 (Div. 2) B. Mike and Fun 暴力

     B. Mike and Fun Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/548/pro ...

  7. Node.js 模块

    稳定性: 5 - 锁定 Node 有简单的模块加载系统.在 Node 里,文件和模块是一一对应的.下面例子里,foo.js 加载同一个文件夹里的 circle.js 模块. foo.js 内容: va ...

  8. Django的配置文件(settings)

    静态文件设置: 一.概述: #静态文件交由Web服务器处理,Django本身不处理静态文件.简单的处理逻辑如下(以nginx为例): # URI请求-----> 按照Web服务器里面的配置规则先 ...

  9. Python-Jupyter Notebook使用技巧

    0. 体验与安装 首先可以通过Jupyter Notebook体验这个链接体验一下Jupyter Notebook. 首先安装ipython:pip3 install ipython 然后安装Jupy ...

  10. 教你如何在Android 6.0上创建系统悬浮窗

    郭霖大神的文章:http://mp.weixin.qq.com/s?__biz=MzA5MzI3NjE2MA==&mid=2650235949&idx=1&sn=0f7eded ...