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 mainint 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++ ,