linux C++多线程操作文件&输出加锁
下述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++多线程操作文件&输出加锁的更多相关文章
- Linux下多线程复制文件(C)
Linux下实现多线程文件复制,使用<pthread.h>提供的函数: int pthread_create(pthread_t *thread,const pthread_attr_t ...
- linux exec操作文件描述符
linux每一个打开文件都会关联一个文件描述符,需要的时候我们可以使用exec命令指定一个大于3的数字作为文件 linux默认文件描述符 每打开一个shell就会打开默认的三个文件描述符描0,1,2, ...
- Linux目录结构以及文件操作
Linux目录结构 UNIX 是以目录为主的,Linux 也继承了这一优良特性. Linux 是以树形目录结构的形式来构建整个系统的,可以理解为树形目录是一个用户可操作系统的骨架.虽然本质上无论是目录 ...
- Linux基础命令之文件和目录操作(二)
. find 用于查找目录下的文件,也可以调用其他命令使用 find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression] fi ...
- Linux C高级编程——文件操作之系统调用
Linux C高级编程文件操作之系统调用 宗旨:技术的学习是有限的,分享的精神是无限的. 库函数是一些完毕特定功能的函数.一般由某个标准组织制作公布,并形成一定的标准.使用库函数编 ...
- linux c编程:文件的操作
在Linux系统中,系统是通过inode来获得这个文件的信息.在Linux系统中,inode的信息都是封装在stat这个结构体中.可以通过man 2 stat来查看stat的具体结构.从中可以看到包含 ...
- 【转】【整理】将Linux脚本中的正常输出,警告,错误等信息输出到文件中
本文来自:http://blog.csdn.net/woshinia/article/details/18040063 很早以前 编译的时候 就在用 2>&1,但是一直没有生成一 ...
- ubuntu chmod 无法更改 文件夹权限 系统提示“不允许的操作 2、linux 如何修改只读文件 3、ubuntu安装
1.ubuntu chmod 无法更改 文件夹权限 系统提示“不允许的操作 答案:需要超级用户权限 sudo 2.linux 如何修改只读文件 答案:可以使用chmod命令,为改文件提供其他的权限.u ...
- java文件操作(输出目录、查看磁盘符)
问题描述: java操作文件,所有硬盘中所有文件路径 问题解决: (1)查看所有磁盘文件 注: 如上所示,使用接口 File.listRoots()可以返回所有磁盘文件,通过f ...
随机推荐
- BZOJ4926 皮皮妖的递推
第二次乱出题.为了方便,以m=2为例,把原式变一下形,得f(i)+f(f(i-1))=i我们先无视掉那个-1,我们发现:诶,这个东西好像斐波那契数列.具体地,我们用f(n)表示把n用斐波那契数列进行拆 ...
- 以太坊MetaMask钱包插件简介
MetaMask是一个以太坊钱包插件,虽然只能在Chrome浏览器中使用,但作为以太坊钱包的metamask却很受以太坊开发者欢迎. MetaMask 评价(5★):安装设置:★★★★界面操作:★★★ ...
- .net 导入excel数据
using System; using System.Data; using System.Data.OleDb; using System.Data.SqlClient; using System. ...
- pytorch_SRU(Simple Recurrent Unit)
导读 本文讨论了最新爆款论文(Training RNNs as Fast as CNNs)提出的LSTM变种SRU(Simple Recurrent Unit),以及基于pytorch实现了SRU,并 ...
- WebService之soap类型的服务和rest类型的服务
1.引言 WebService顾名思义就是web服务,web服务主要有两种,一种是基于soap类型的服务,一种是基于rest类型的服务,其中soap类型的服务有两种版本,一种是soap1.1版本,一种 ...
- 女儿开始bababababa的发声了
女儿八个半月,开始bababababa的发声了,而不是像以前总啊啊啊的.
- Spring boot 整合 Mybatis + Thymeleaf开发web(二)
上一章我把整个后台的搭建和逻辑给写出来了,也贴的相应的代码,这章节就来看看怎么使用Thymeleaf模板引擎吧,Spring Boot默认推荐Thymeleaf模板,之前是用jsp来作为视图层的渲染, ...
- iOS开发-文件管理
iOS学习笔记(十七)--文件操作(NSFileManager) 浅析 RunLoop 解决EXC_BAD_ACCESS错误的一种方法--NSZombieEnabled iOS开发--Swift篇&a ...
- LintCode题解之统计数字
直接硬搜就可以了,只是需要考虑k为0的情况. public class Solution { /* * @param : An integer * @param : An integer * @ret ...
- CodeForces - 766B Mahmoud and a Triangle
[题意概述] 给定一串数,从中挑三个,判断能否组成一个有正面积的三角形,如果能就输出YES,否则就输出NO [题目分析] 将 n 个数从大到小进行排列,三个三个往下去判断,只要后两个的和比第一个大的时 ...