1.3 day3 IO进程线程

使用标准IO进行文件拷贝

#include 
int main(int argc, const char *argv[])
{
	if(argc!=3)//外部传参
	{
		printf("input error\n");
	}
	//定义两个文件指针
	FILE *fp=NULL;
	FILE *cfp=NULL;
	if((fp=fopen(argv[1],"r"))==NULL)
	{
		perror("fopen error");
		return -1;
	}
	if((cfp=fopen(argv[2],"w"))==NULL)
	{
		perror("fopen error");
		return -1;
	}
	char buf[128]="";
	int res;
	//循环将读取到的数据写入另一个文件中
	while((res=fread(buf,sizeof(char),sizeof(buf),fp))!=0)
	{
		fwrite(buf,sizeof(char),res,cfp);
	}
	fclose(fp);
	fclose(cfp);
	return 0;
}

1.3 day3 IO进程线程_第1张图片

使用文件IO进行文件拷贝

#include 
int main(int argc, const char *argv[])
{
	if(argc!=3)//外部传参
	{
		printf("input error\n");
	}
	//定义两个文件描述符
	int fd=-1;
	int cfd=-1;
	if((fd=open(argv[1],O_RDONLY))==-1)
	{
		perror("open error");
		return -1;
	}
	if((cfd=open(argv[2],O_WRONLY|O_CREAT|O_TRUNC,0664))==-1)
	{
		perror("open error");
		return -1;
	}
	char buf[128]="";
	int res;
	//将读到的数据循环写入另一个文件中
	while((res=read(fd,buf,sizeof(buf)))!=0)
	{
		write(cfd,buf,res);
	}
	close(fd);
	close(cfd);
	return 0;
}

1.3 day3 IO进程线程_第2张图片

使用sata函数实现  ls -l  指令

#include 
int main(int argc, const char *argv[])
{
	//定义文件属性类型的数据
	struct stat sb;//用于储存获取的文件属性
	stat(argv[1],&sb);//调用函数得到文件属性
	switch(sb.st_mode&S_IFMT)
	{
	case S_IFSOCK:
		{
			printf("这是套接字文件\n");
		}
		break;
	case S_IFLNK:
		{
			printf("这是链接文件\n");
		}
		break;
	case S_IFREG:
		{
			printf("这是普通文件\n");
		}
		break;
	case S_IFBLK:
		{
			printf("这是块设备文件\n");
		}
		break;
	case S_IFDIR:
		{
			printf("这是目录文件\n");
		}
		break;
	case S_IFCHR:
		{
			printf("这是字符设备文件\n");
		}
		break;
	case S_IFIFO:
		{
			printf("这是管道文件\n");
		}
		break;
	}
	printf("%#o\t%ld\t%ld\n",sb.st_mode&0777,sb.st_size,sb.st_ino);
	return 0;
}

1.3 day3 IO进程线程_第3张图片

使用opendir,closedir,readdir对目录操作

#include 
int main(int argc, const char *argv[])
{
	if(argc!=2);
	DIR *fd=NULL;
	if((fd=opendir(argv[1]))==NULL)
	{
		perror("opendir error");
		return -1;
	}
	//读取目录中的文件或目录的信息
	struct dirent *sfd;
	while((sfd=readdir(fd))!=NULL)
	{
		//输出当前文件或目录的信息
		printf("name:%10s\t inode:%10ld\t 结构体大小:%10d ,dype:%d\n",sfd->d_name,sfd->d_ino,sfd->d_reclen,sfd->d_type);
		//输出类型
		switch(sfd->d_type)
		{
			case DT_BLK:
				printf("b");
				break;
			case DT_CHR:
				printf("c");
				break;
			case DT_DIR:
				printf("d");
				break;
			case DT_FIFO:
				printf("p");
				break;
			case DT_LNK:
				printf("l");
				break;
			case DT_REG:
				printf("-");
				break;
			case DT_SOCK:
				printf("s");
				break;
		}

	}
	closedir(fd);
	return 0;
}

1.3 day3 IO进程线程_第4张图片

 

你可能感兴趣的:(linux,算法,运维)