`
yunchow
  • 浏览: 328061 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

UC++之目录和文件操作

    博客分类:
  • C++
阅读更多
* UC
  + 文件系统
- 目录操作
- 文件操作
  + 多进程
- 进程间关系
- 进程间通信
  + 网络通信
- 基础知识
- 实践(tcp/udp)

QT,KDE: Linux环境下的图形环境编程

=================================================================
* 环境变量:

  + 如何在程序中取得环境变量的内容?

//取得所有的环境变量	- 
#include <iostream>
using namespace std;

int main(int argc, char* argv[], char* env[])
{
        for( int i=0; env[i]; i++ ){
                if(i<9) cout << 0;
                cout<< i+1 <<":   " << env[i] << endl;
                if(i%8==7) cin.get();
        }
        cout << endl;
}

在进程中设置的环境变量只在本进程与子进程里使用
因此我们几乎不在程序里修改环境变量.
//得到确定的环境变量
#include <iostream>
#include <cstdlib>
using namespace std;

int main()
{
        char* name = "HOME";
        char* value = NULL;
        value = getenv(name);
        cout << "value=" << value << endl;
}
//设置环境变量
#include <iostream>
using namespace std;
#include <cstdlib>

int main()
{
        char* var = "baby=beauty";
        char* name="baby";
        putenv(var);
        char* value = getenv(name);
        cout << "value=" << value << endl;
}



* 编程习惯:
1, 向函数传递指针数组的时候,如果没有说明元素个数,总是用一个NULL放在末尾.以

NULL作为结束标志.
2, 返回指针的函数,正常返回一个非空指针,出错返回NULL.
3, 返回整数函数,正常返回一个非负整数(通常是0),出错返回负数(通常是-1)
perror("提示");//显示内容为: 提示:错误信息文字描述
-----------------------------------------------------------
* 用户信息:
设置-用户权限:chmod u+s a.out//把用户ID符加到文件上
//指权限沾符到这个文件上,让使用这个文件的用户都有拥有者一样的权限
XXX_t 表示是一个整数
struct passwd* getpwuid (int userid)//得到一个指向passwd结构的指针,该结构

包括用户相关信息记录.
#include <iostream>
using namespace std;
#include <pwd.h>

int main()
{
	passwd* p = NULL;
	string name;
	int uid;
	cout << "input username or id:";
	char ch;
	ch = cin.peek();
	if(ch>='0'&&ch<='9'){
		cin >> uid;
		p = getpwuid(uid);
	}
	else{
		cin >> name;
		p = getpwnam(name.c_str());
	}
	if(p==NULL){
		cout << "error!" << endl;
	}
	else{
		cout << p->pw_name << endl;
		cout << p->pw_uid << endl;
		cout << p->pw_gid << endl;
		cout << p->pw_dir << endl;
		cout << p->pw_shell << endl;
	}
		
}


---------------------------------------------------------
* 文件系统:
  + 目录
pwd:print working directory
/char* getcwd(char* buf,size_t size);//取得当前工作目录,出错返回NULL
// buf是放目录名字符串的地方,一般是一个字符数组名.
// size 为了避免越界,会把字符串长度也传过去
// 凡是要自已准备字符数组来保存字符串的时候,也要把长度传过去.
// 数组越界访问会导致破坏其它数据或程序崩溃.
// 根据返回值判断是否出错
// 函数里有一条语句: return buf;
// 因此可以直接 cout << getcwd(buf,256);
// getcwd.cc
#include <iostream>
using namespace std;
#include <unistd.h>
int main()
{
	char buf[256] = "(unknow)";// 一定要用char数组
	cout << getcwd(buf,256) << endl;ssss
	cout << buf << endl;
}
DIR* opendir(const char* dirname)//打开目录
/不能定义一个DIR对象,通常也不会定义DIR*类型变量
struct dirent* readdir(DIR* dirp)//读取目录
int closedir(DIR* dirp)//关闭目录流
//dir.cc
#include <iostream>
using namespace std;
#include <dirent.h>
#include <sys/types.h>
#include <list>
#include <string>
#include <iterator>
#include <algorithm>
int main(int argc,char* argv[])
{
        char* dir = NULL;
        if(argc==1)
                dir = ".";
        else
                dir = argv[1];
        DIR* p = opendir(dir);//....
        if(p==NULL){
                cout << "not directory or not exitst" << endl;
                return -1;//....
        }
        list<string> ls;
        dirent* pd = NULL;
        while( (pd=readdir(p))){
                if(pd->d_name[0]=='.') continue;
                ls.push_back(pd->d_name);
        }
        closedir(p);//.....
        ls.sort();
        //copy(ls.begin(),ls.end(),ostream_iterator<string>(cout,"\n"));
        list<string>::iterator it;
        it = ls.begin();
        while(it!=ls.end())
                cout << *it++ << ' '  << endl;
        cout << endl;
        return 0;//....
} //end of main


int stat(const char* path/*文件名*/,stat* buf)函数;//用来取得一个文件的信


//stat.cc
#include <iostream>
using namespace std;
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>

int main(int argc, char* argv[])
{
        if(argc==1) {
                cout << "no filename" << endl;
                return 0;
        }
        int res;
        struct stat s;
        res = stat(argv[1],&s);
        if(res <0){
                cout << "no file"<<endl;
                return -1;
        }
        cout << s.st_uid <<','<< s.st_size<<endl;
        if(S_ISDIR(s.st_mode))
                cout << "directory" << endl;
        else

                cout << "file" << endl;
}//end main


int mkdir("新目录名",权限);//创建目录
int rmdir("目录名");//删除目录
getcwd(字符数组名,字符数组长度);//取得当前目录名
chdir("目录名");//设置当前目录名,在执行期间有效,程序结束失效

//目录操作示例
#include <iostream>
using namespace std;
#include <sys/stat.h>
#include <unistd.h>
#include <string>
int main()
{
        string cmd;
        string dirname;
        for(;;){
                cout << "cmd:";
                cin >> cmd;
                if(cmd=="mkdir"){
                        cin >> dirname;
                        mkdir(dirname.c_str(),0777);
                }
                else if(cmd=="rmdir"){
                        cin >> dirname;
                        rmdir(dirname.c_str());
                }
                else if(cmd=="chdir"){
                        cin >> dirname;
                        chdir(dirname.c_str());
                }
                else if(cmd=="pwd"){
                        char buf[256];
                        getcwd(buf,256);
                        cout << buf << endl;
                }
                else if(cmd=="bye"){
                        cout << "C U" << endl;
                        break;
                }
                else
                        cout << "unknow command!"<< endl;
        }// end for
}// end main

rename("旧名","新名");//给目录或文件改名.

  ===================================================
  + 文件的操作  02:03:17

文件权限的差别
int access(const char *path/*文件名*/,int amode)
amode:R_OK,W_OK,X_OK,F_OK(是否存在)
如果有指定权限,返回0.没有返回小于0
if(!access..)
用open()函数打开一个文件
ofstream fout;
fout.open("文件名");
int open(const char* pathname,int oflag,...);
<O_RDONLY|O_WRONLY|O_RDWR>这三个中必选一个,也只能选一个.
O_APPEND O_CREAT O_EXCL 可写可不写.
如果有O_CREAT,要传第三个参数就是创建文件权限,一般是8进制0755或0644
O_CREAT|O_EXCL表示必须创建新文件
返回文件描述符fd
进程使用文件描述符来操作文件.

文件描述符
shell产生三个标准文件描述符
0,1,2对应于cin,cout,cerr

删除文件:
unlink("文件名");//
remove("文件名");//

在UC里都是用文件描述符来描述文件
在对文件读的时候,如果读到的字节数小于要求的字节数,表示读完了
write(fd,内存地址,字节数)//向文件写
读和写都是顺序的.

//文件读写例程
#include <iostream>
using namespace std;
#include <iostream>
#include <fcntl.h>
#include <unistd.h>

int main()
{
        int fd = open("rw.txt",O_RDWR);
        if( fd<0 ){
                cout << "file not exist";
                return -1;
        }
        int len;
        char bu[4];
        len = read(fd,bu,4);
        for( int i=0;i<4;i++)
                cout << bu[i];
        cout << endl;
        char* str = "xxxx";
        write(fd,str,4);
        close(fd);
}

off_t lseek(int fd, off_t offset, int whene);
whene:SEEK_SET SEEK_CUR SEEK_END
对应core C++ 中的fin.seekg(offset);
fout.seekp(offset);
<>,<sys/stat.h>,<dirent.h>//目录操作头文件
//lseek.cc
#include <iostream>
using namespace std;
#include <fcntl.h> //.......
#include <unistd.h>//.......
int main()
{
        int fd = open("rw.txt",O_RDWR);
        if( fd<0 ){
                cout << "file not exist" << endl;
                return -1;
        }
        char ch;
        for(int i=0;i<3;i++){
                read(fd,&ch,1);
                cout << ch;
                lseek(fd,1,SEEK_CUR);
        }
        cout << endl;
        lseek(fd,0,SEEK_SET);
        char buf[9];
        read(fd,buf,8);
        buf[8] = '\0';
        cout << buf << endl;
        lseek(fd,0,SEEK_END);
        write(fd,"bye\n",4);
        close(fd);
}
//因此我们可以用lseek函数来写一个小型的数据库
1
0
分享到:
评论

相关推荐

    kernel-devel-4.18.0-553.45.1.el8-10.x86-64.rpm

    Rocky Linux 8.10内核包

    Simulink中三阶单环多位量化Σ-Δ调制器的设计与实现-音频带ADC的应用(复现论文或解答问题,含详细可运行代码及解释)

    内容概要:本文档详细介绍了如何在Simulink中设计一个满足特定规格的音频带ADC(模数转换器)。首先选择了三阶单环多位量化Σ-Δ调制器作为设计方案,因为这种结构能在音频带宽内提供高噪声整形效果,并且多位量化可以降低量化噪声。接着,文档展示了具体的Simulink建模步骤,包括创建模型、添加各个组件如积分器、量化器、DAC反馈以及连接它们。此外,还进行了参数设计与计算,特别是过采样率和信噪比的估算,并引入了动态元件匹配技术来减少DAC的非线性误差。性能验证部分则通过理想和非理想的仿真实验评估了系统的稳定性和各项指标,最终证明所设计的ADC能够达到预期的技术标准。 适用人群:电子工程专业学生、从事数据转换器研究或开发的技术人员。 使用场景及目标:适用于希望深入了解Σ-Δ调制器的工作原理及其在音频带ADC应用中的具体实现方法的人群。目标是掌握如何利用MATLAB/Simulink工具进行复杂电路的设计与仿真。 其他说明:文中提供了详细的Matlab代码片段用于指导读者完成整个设计流程,同时附带了一些辅助函数帮助分析仿真结果。

    计算机课后习题.docx### 【计算机科学】研究生入学考试计算机组成原理专项题库设计:考研复习资源集成与优化

    内容概要:该题库专为研究生入学考试计算机组成原理科目设计,涵盖名校考研真题、经典教材课后习题、章节题库和模拟试题四大核心模块。名校考研真题精选多所知名高校的计算机组成原理科目及计算机联考真题,并提供详尽解析,帮助考生把握考研命题趋势与难度。经典教材课后习题包括白中英《计算机组成原理》(第5版)和唐朔飞《计算机组成原理》(第2版)的全部课后习题解答,这两部教材被众多名校列为考研指定参考书目。章节题库精选代表性考题,注重基础知识与重难点内容,帮助考生全面掌握考试大纲要求的知识点。模拟试题依据历年考研真题命题规律和热门考点,精心编制两套全真模拟试题,并附标准答案,帮助考生检验学习成果,评估应试能力。 适用人群:计划参加研究生入学考试并报考计算机组成原理科目的考生,尤其是需要系统复习和强化训练的学生。 使用场景及目标:①通过研读名校考研真题,考生可以准确把握考研命题趋势与难度,有效评估复习成效;②通过经典教材课后习题的练习,考生可以巩固基础知识,掌握解题技巧;③通过章节题库的系统练习,考生可以全面掌握考试大纲要求的各个知识点,为备考打下坚实基础;④通过模拟试题的测试,考生可以检验学习成果,评估应试能力,为正式考试做好充分准备。 其他说明:该题库不仅提供详细的题目解析,还涵盖了计算机组成原理的各个方面,包括计算机系统概述、数据表示与运算、存储器分层、指令系统、中央处理器、总线系统和输入输出系统等。考生在使用过程中应结合理论学习与实践操作,注重理解与应用,以提高应试能力和专业知识水平。

    __UNI__DB9970A__20250328141034.apk.1

    __UNI__DB9970A__20250328141034.apk.1

    minio-rsc-Rust资源

    rust for minio

    4-4-台区智能融合终端功能模块型式规范(试行).pdf

    国网台区终端最新规范

    《基于YOLOv8的化工管道焊缝缺陷检测系统》(包含源码、可视化界面、完整数据集、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip

    资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。

    python源码-1个机器学习相关资源

    一个简单的机器学习代码示例,使用的是经典的鸢尾花(Iris)数据集,通过 Scikit-learn 库实现了一个简单的分类模型。这个代码可以帮助你入门机器学习中的分类任务。

    pyqt离线包,pyqt-tools离线包

    pyqt离线包,pyqt-tools离线包

    《基于YOLOv8的船舶机舱灭火系统状态监测系统》(包含源码、可视化界面、完整数据集、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip

    资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。

    SQL常用日期和时间函数整理及使用示例

    SQL常用日期和时间函数整理及在sqlserver测试示例 主要包括 1.查询当前日期GETDATE 2.日期时间加减函数DATEADD 3 返回两个日期中指定的日期部分之间的差值DATEDIFF 4.日期格式转换CONVERT(VARCHAR(10),GETDATE(),120) 5.返回指定日期的年份数值 6.返回指定日期的月份数值 7.返回指定日期的天数数值

    GSDML-V2.3-Turck-BL20-E-GW-EN-20160524-010300.xml

    GSDML-V2.3-Turck-BL20_E_GW_EN-20160524-010300.xml

    T_CPCIF 0225-2022 多聚甲醛.docx

    T_CPCIF 0225-2022 多聚甲醛.docx

    《基于YOLOv8的智能仓储货物堆码倾斜预警系统》(包含源码、可视化界面、完整数据集、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip

    《基于YOLOv8的智能仓储货物堆码倾斜预警系统》(包含源码、可视化界面、完整数据集、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计

    蚕豆脱壳机设计.zip

    蚕豆脱壳机设计.zip

    附件2-2:台区智能融合终端入网专业检测单位授权委托书.docx

    台区终端电科院送检文档

    Y6一39一No23.6D离心通风机 CAD().zip

    Y6一39一No23.6D离心通风机 CAD().zip

    django自建博客app

    django自建博客app

    附件3-4:台区智能融合终端全性能试验增值税发票开具确认单.docx

    台区终端电科院送检文档

    非开挖水平定向钻机动力头装置设计.zip

    非开挖水平定向钻机动力头装置设计.zip

Global site tag (gtag.js) - Google Analytics