`
yunchow
  • 浏览: 324436 次
  • 性别: 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
分享到:
评论

相关推荐

    uc++.

    可能涉及编译、链接、调试工具(如 `g++`, `make`, `gcc`, `gdb`),以及如何利用 Unix 工具进行文件操作和程序管理。 学习这些内容可以帮助你掌握在 Unix 平台上高效地开发、测试和维护 C++ 应用程序的技能。Unix ...

    达内UC++课件

    文件系统是Unix系统的核心组成部分,课程详细阐述了文件和目录的管理,包括常用命令如`cd`、`ls`、`mkdir`、`pwd`、`id`、`who`、`cp`、`rm`、`cat`、`chown`、`chmod`、`ln`、`find`、`which`等的使用方法。...

    uc++ c++ 代码 初级 练习

    压缩包中的文件“uc02”可能是练习的第二部分,可能涉及到更复杂的概念,如函数指针、动态内存分配(new, delete)或者更深入的文件操作。通过解决这样的练习,初学者可以逐步熟悉C++编程语言,并掌握在Unix环境下...

    UC文件文本的对比工具

    总的来说,UC文件文本的对比工具是一个为64位系统设计的开源软件,它提供了一种高效的方式来比较和合并文本文件,特别适合程序员和文档编写者在日常工作中使用。通过利用开源社区的力量,它可能具备了强大的功能和...

    网易云音乐缓存uc,uc!格式转码mp3

    文件,通常位于应用的缓存目录下。对于手机端,你可能需要通过文件管理器找到相应的路径;对于电脑端,可以在网易云音乐的设置中查看缓存位置。 2. **安装转换工具**:解压“NeteaseMusicCacheDecode-master”并...

    PC版本 网易云音乐.uc格式的缓存文件转.mp3

    在转换过程中,工具会自动识别.uc文件中的元数据,如艺术家和曲目标题,将其写入生成的.mp3文件的ID3标签中,这样在其他播放器中就可以正确显示歌曲信息。 此外,安全是转换过程中不可忽视的一环。这里提到的工具...

    Android 仿UC8+底部menu菜单

    UC8是UC浏览器的一个版本,其底部菜单设计简洁且易于操作,因此成为了许多开发者模仿的对象。在这个项目中,我们将探讨如何在Android应用中实现类似的底部菜单功能。 首先,菜单(Menu)是Android中提供的一种用户...

    UC/FS 文件系统

    通过示例程序,我们可以了解如何调用UC/FS的API进行文件操作。 总之,UC/FS是一个值得学习和研究的文件系统,它在轻量化、可移植性和高效性方面的特点,使其成为嵌入式系统开发者的得力工具。对于希望在这一领域...

    网易云音乐 uc缓存转mp3

    6. **文件操作**:转换过程可能涉及到读取UC浏览器的缓存文件,写入新的MP3文件,以及可能的临时文件操作。 7. **音频编码标准**:理解MP3编码标准是必要的,包括MPEG-1 Audio Layer 3的帧结构、采样率、比特率等...

    uc/os-ii 源码和配置文件

    `ucos-ii`目录下的文件包含了完整的源码和示例,可供学习和参考。 5. **移植性与扩展性** UC/OS-II具有高度的可移植性,它提供了移植指南和硬件抽象层(HAL)接口,使得在不同微处理器上部署变得相对简单。此外,...

    STM32+LWIP+OS http下载文件C语言实现

    操作系统(OS)在这里可能是FreeRTOS或uC/OS等实时操作系统,用于任务调度和管理。这个项目的目标是利用STM32、LWIP和操作系统来实现在C语言环境中通过HTTP协议下载文件。 首先,我们需要理解HTTP协议的基本工作...

    网易云音乐uc转mp3工具.zip

    从标签 "python uc文件 网易云音乐" 可以进一步推测,这个工具的核心功能是处理与网易云音乐相关的UC音频文件。它可能是通过解析UC文件的结构,将其解码并重新编码成MP3格式。这个过程涉及到了音频编码解码的知识,...

    UC7410 配置方法

    UC7410是一款由MOXA公司生产的网络设备,常用于工业自动化领域的数据通信。配置UC7410主要是为了设定其...注意,操作过程中应谨慎操作,避免误改其他重要设置,同时保持良好的记录习惯,以便于日后的故障排查和维护。

    基于UC3842+LTS26Q1565A设计PC机充电器 硬件(原理图+PCB)工程文件.zip

    工程文件还包括项目文件(.PrjPcb),它包含了整个设计项目的元器件库、网络表和其他相关设置,方便在设计软件中管理和操作。 描述中提到的“硬件2层板设计,大小为182*64mm”是指这款充电器的PCB尺寸,采用了双层...

    华视100uc 可用的32位 dll文件

    DLL文件是Windows操作系统中用于共享代码和资源的库,它们能让多个程序共用相同的函数和数据,以节省内存和磁盘空间。在32位环境下,这些DLL文件是为32位版本的Windows系统设计的,不能在64位系统上直接运行。 描述...

    uC/FS 3.10 文件系统源码 支持多种存储设备

    FAT文件系统提供了目录结构、文件命名规则、数据存储和检索等功能,使得嵌入式设备能够处理复杂的文件操作。 在uC/FS 3.10中,对串行闪存的支持意味着它能够适应低功耗、小体积的应用场景,如物联网设备或移动通信...

    F800 UC7.7+8.0浏览器(内有教程)

    【UC7.7+8.0浏览器】是针对酷派F800手机设计的一款浏览器应用,它结合了7.7和8.0两个版本的特点,提供了更优化的浏览体验和更多的功能。这款浏览器旨在提高用户在移动设备上的网页浏览效率,同时也注重用户体验和...

    uC/OS-II内核文件

    【标题】"uC/OS-II内核文件"指的是嵌入式操作系统μC/OS-II的源代码文件集合,这是专为微控制器设计的一种实时操作系统(RTOS)。μC/OS-II以其小巧、高效和可移植性著称,适用于各种微处理器架构,包括Cortex-M3...

Global site tag (gtag.js) - Google Analytics