当前位置:编程学习 > C/C++ >>

UC++之目录和文件操作

* 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," "));
        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){
    &nbs

补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,