题目
代码
class File
{
private:FILE* fp; //文件指针
public:File(const char* fimename); //构造函数void write(const char* str);//数据写入char* read(int size); //数据读取~File(); //析构函数
};
/*********************************** main主函数 ***********************************/
int main(int argc,const char** argv)
{//打开文件File f="readme";//写入数据f.write("你好世界");f.write("你好新世界");//读取数据char* dataPtr=f.read(128);//显示数据cout<<dataPtr<<endl;//释放空间free(dataPtr);return 0;
}/*********************************** 构造函数 与 成员方法 ***********************************/
File::File(const char* fimename):fp(NULL) //初始化成员属性
{//如果文件存在if(access(fimename,F_OK)==0){//以读写形式打开fp=fopen(fimename,"r+");//判断是否成功打开if(NULL==fp){cout<<"文件打开失败"<<endl;}return;}//如果文件不存在.创建后打开fp=fopen(fimename,"w+");//判断是否成功打开if(NULL==fp){cout<<"文件打开失败"<<endl;}
}void File::write(const char* str)
{//检查地址是否合法if(NULL==fp){cout<<"地址不合法"<<endl;return;}//获取数据int len=strlen(str); //用于记录数据长度char data[len]={0}; //用于存放数据内容strncpy(data,str,len); //复制数据到数组//数据写入fwrite(data,len,1,fp);return;
}char* File::read(int size)
{//检查地址是否合法if(NULL==fp){cout<<"地址不合法"<<endl;return NULL;}//申请空间,用于存放数据char* dataPtr=(char*)malloc(size);//读取数据fseek(fp,SEEK_SET,0); //光标移到文件开头fread(dataPtr,size,1,fp); //开始读取return dataPtr;
}File::~File()
{if(NULL!=fp){free(fp);}
}
效果
题目
代码
//类
class Mutex
{
private:pthread_mutex_t mutex; //锁名
public:Mutex(int tpye);//构造函数void lock(); //上锁void unlock(); //解锁~Mutex(); //析构函数
};//分支线程
void* thread1(void* arg);/*********************************** main主函数 ***********************************/
//选择互斥锁
// Mutex MUTEX=PTHREAD_MUTEX_FAST_NP; //快速锁
// Mutex MUTEX=PTHREAD_MUTEX_RECURSIVE_NP; //递归锁
Mutex MUTEX=PTHREAD_MUTEX_ERRORCHECK_NP; //错误检查锁int main(int argc,const char** argv)
{//创建线程pthread_t id;pthread_create(&id,NULL,thread1,NULL); //将互斥锁传入pthread_detach(id); //设置为自动回收//从终端吃到数据,则程序结束while(getchar()!=10);return 0;
}/*********************************** 构造函数 与 成员方法 ***********************************/
Mutex::Mutex(int tpye)
{//创建 互斥锁属性 变量pthread_mutexattr_t attr;//互斥锁属性 初始化pthread_mutexattr_init(&attr);//设定为相应的锁pthread_mutexattr_settype(&attr,tpye);//用锁属性 给 锁 初始化pthread_mutex_init(&mutex,&attr);//销毁互斥锁属性 变量pthread_mutexattr_destroy(&attr);
}void Mutex::lock()
{pthread_mutex_lock(&mutex);
}
void Mutex::unlock()
{pthread_mutex_unlock(&mutex);
}Mutex::~Mutex()
{pthread_mutex_unlock(&mutex);if(pthread_mutex_destroy(&mutex)==0){cout<<"互斥锁已销毁"<<endl;}
}/*********************************** 分支线程 ***********************************/
void* thread1(void* arg)
{while (1){MUTEX.lock();MUTEX.lock();cout<<"A号 行动"<<endl<<endl;sleep(1);MUTEX.unlock();MUTEX.unlock();}
}
效果