⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unix c++ day01 笔记.txt

📁 因为在C语言草创的年代
💻 TXT
字号:
unix C++  day01  笔记

五天的课程计划:

	第一天:文件系统
	第二天:多进程
	第三天:进程间通信
	第四天:网络介绍
	第五天:网络通信实战


	unix下编程习惯	  1、返回整数时   成功返回 0(>0),失败返回-1(<0)

	                  2、返回指针时   成功返回正常指针(非空),失败返回空指针(NULL)
				
			  3、数据类型: xxxx_t 表示整数
		
			  4、要取得数据先准备好存放数据的地方:int getxxx( X* buf , ...)

				例:char* buf;          |  chr buf[20];
				    buf=new char[20];
				    getname(buf); 

		显示主目录(主路径)的命令:pwd , echo $HOME 
       
        	显示所有环境变量:env 或 set
	
		每个用户都有一个uid,至少属于一个组
	
	取得环境变量:int main(int argc,char* argv[],chr* env[]);    (参看课堂代码env.cc)
			
		      	 每个指针指向一个环境变量字符串,以NULL为结束

	    	如果一个指针数组没有告诉元素个数,一定用NULL作为这个数组的结束标记
			
	取得某个环境变量的值:char* getenv(const char* name)  (参看课堂代码getenv.cc)
			      参数是环境变量的名字,正确返回环境变量的值,出错返回NULL
			      头文件<cstdlib>或<stdlib.h>
			      例:char* p=getenv("PATH");
	
	修改环境变量的值:int putenv(const char* str);
			  参数是新的环境变量和值,正确返回0,出错返回-1
			  头文件<cstdlib>或<stdlib.h>
			  例:putenv("MYVAR=GOOD");
	
		设置的环境变量只对本进程或子进程有效,当前工作目录也只对本进程或子进程有效

	进程:一份正在执行的程序

	      ps -ef 查看系统中运行的所有进程   PID就是进程id
	      ps 查看当前终端运行的程序
	      ps -l 查看进程运行的状态

		 常见状态:O 正在运行
		     	   S 睡眠,等待调度
		           R 已装载,准备就绪,可以运行
		     	   Z 僵死进程,已结束但不释放资源
		           T 已停止,挂起状态,处于挂
		      
	      ps -f -p 进程号  查看此进程的父进程
		  init的进程id总是1

	用户信息操作函数:  (参看课堂代码getenv.cc)

		头文件:<unistd.h>
			char* getlogin();  得到用户登录名
			int getuid();      得到当前登录用户的用户ID号
			int geteuid();     得到当前运行该进程的有效用户ID
		
		头文件:<pwd.h>
			struct passwd* getpwuid(int userid);    根据用户ID取得用户的完整信息,返回一个指向passwd的结构指针
			struct passwd* getpwnam(const char* username);  根据用户名取得用户的完整信息
	
	用户组信息操作函数:
		 
		头文件:<unistd.h>
			int getgid();    得到当前登录用户组的ID  
			int getegid();   得到当前运行:该进程的有效用户组ID
		
		头文件:<grp.h>
			struct group* getgrgid(int groupid);   根据一个组ID取得这个组的信息(不一定是完整的)

	
文件系统:
	
	任何操作系统的文件都是树形结构。
	
	绝对路径-----以根开头的路径为绝对路径
	相对路径-----以当前目录为出发点的路径


	目录操作:(参看课堂代码:directory.cc)
	
		创建一个新的目录:

			int mkdir(const char* name,int mode);

				name---目录名
				mode---权限
				头文件<sys/stat.h>
				成功返回0(大于0),失败返回-1(小于0)

		删除一个目录:

			int rmdir(const char* name);

				name---目录名
				头文件<unistd.h>
				成功返回0(大于0),失败返回-1(小于0)

		取得当前工作目录:(参看课堂代码getcwd.cc)

			char* getcwd(char* buf,int size);  

				头文件<unistd.h> 
				buf用于存放结果,把取得的当前工作目录放到buf指向的地方,
				buf是事先准备好的空间地址,必须指定大小
				size是buf的长度,如果buf的长度是len,size通常传len-1,留一个存放'\0'
				返回类型与buf中的内容是一致的

		改变当前工作目录:
		
			int chdir(const char* name);

				头文件<unistd.h> 
				name是新目录名
				成功返回0(大于0),失败返回-1(小于0)
		
		打开一个目录:头文件<dirent.h>
			
			DIR* opendir(const char* dirname);
				用一个DIR指针来代表这个目录

		读取目录中的一个目录项:
		
			struct dirent* readdir(DID* dirp);
				每次读取目录中的一个目录项
				根据返回指针是否为空判断是否读完
				dirent结构中,d_name成员用于保存目录项的名称。

		关闭一个被打开的目录:

			int closedir(DIR* dirp);
			
		
	文件操作:
		
		打开文件:int open(const char* pathname,int flag,...);
				头文件<fcntl.h>,<sys/stat.h>,<sys/types.h>

			 	pathname是一个文件的全名(包含文件路径)
				flag这是一个表示文件打开方式的值,它只能从几个特定的值中选择
				(O_RDONLY只读模式,O_WRONLY只写模式,O_RDWR读写方式)这三种方式必选其一其只能选一个

				O_APPEND,追加方式,
				O_CREATE如果文件不存在就创建,这个模式需要额外提供一个文件权限的参数
				O_EXCL独占模式需和O_CREATE联合使用,
				O_TRUNC打开文件同时清空内容

			open函数返回值:是一个文件描述符,如果其小于0旧表示文件打开操作失败。
			
			例:int fd=open(argv[1], O_WRONLY|O_CREAT, 0666);
			

		读文件:size_t read(int fd,void* buf,size_t nbytes)
				头文件<unistd.h>
				fd是由open函数返回的文件描述符,表示读哪个文件
				buf用于存储读入的数据,即从文件中读的数据放到哪里,在使用read前要为其申请空间
				nbytes要读多少字节的数据
			返回值:如果执行成功,返回一个>0的整数,表示本次读取操作实际读入的字节数,失败返回-1

		写文件:size_t write(int fd,void* buf,size_t nbytes);
				头文件<unistd.h>
				fd是由open函数返回的文件描述符,表示读哪个文件
				buf用于存储要写入文件的数据,即要写的数据在哪里
				nbytes想写入文件多少字节的数据
			返回值:如果执行成功,返回一个>0的整数,表示本次实际写入的字节数,失败返回-1
			
		关闭文件:int close(int fildes);
				头文件<unistd.h>
				fildes是文件描述符
			   	
	文件描述符:由系统内核产生,非负整数,shell产生三个标准文件描述符(0,1,2)对应于(cin,cout,cerr),cin,cout可以重定向,cerr不能重定向
	

	修改与fd对应的文件中文件偏移量的值,动态调整文件指针:
		off_t lseek(int fd,off_t offset,int whence)
	
			fd文件描述符,
			offset文件偏移量,
			whence移动策略(以哪里为基准)
				  SEEK_SET,文件首,偏移量需为非负,
				  SEEK_CUR,文件当前位置,
				  SEEK_END文件尾,偏移量需为负值
			返回值:成功返回>0的整数,表示挪动的字节数,失败返回<0的数

		注意如果偏移量的设置不正确会遭成文件空洞
	文件权限判断:

		int access(const char* path,int amode)
			path:文件名
			amode:判断的模式,R_OK,读权限 W_OK,写权限 X_OK,执行权限 F_OK,文件是否存在
			返回值为0或大于0操作成功,小于0操作失败。


作业: 1、写一个程序,在当前用户的主目录下建一个子目录名叫data,权限0755,
	在这个子目录中建一个文件a.txt,在文件中写一些数据,如:hello,UNIXC!

      2、写一个程序,实现产生不重复的id

		
	
	   

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -