【IOday4作业】

任务1:fork前创建一个int a,父子进程中是否都有变量a,虚拟地址是否相同,物理地址是否相同

#include 
#include 
#include 
int main(int argc, const char *argv[])
{
	int a=10;

  pid_t id_1=fork();
 if(id_1==0)
 {     
	 printf("子进程a的地址:%p  a=%d\n",&a,a);
 }
 else
 {   
	 int *p=&a;
	 *p=20;
	 printf("父进程a的地址:%p  a=%d\n",&a,a);
 }
	return 0;
}

结果:

父进程a的地址:0x7ffe11004ea8  a=20
子进程a的地址:0x7ffe11004ea8  a=10

说明父子进程中都有a的存在,他们虚拟地址相同,物理地址不同。

任务2:fork函数后,在父进程中int b,父子进程中是否都有变量b,虚拟地址是否相同,物理地址是否相同

#include 
#include 
#include 
int main(int argc, const char *argv[])
{

  pid_t id_1=fork();
 if(id_1==0)
 {     
	 int *p=&b;
	 printf("子进程b的地址:%p  b=%d\n",p,*p);
 }
 else
 {   

	 int b=100;
	 printf("父进程b的地址:%p  b=%d\n",&b,b);
 }
	return 0;
}

结果:

zuoye2.c: In function ‘main’:
zuoye2.c:10:11: error: ‘b’ undeclared (first use in this function)
   10 |   int *p=&b;
      |           ^
zuoye2.c:10:11: note: each undeclared identifier is reported only once for each function it appears in

说明:子进程里没有b变量。

任务3:fork函数后,在子进程中int c,父子进程中是否都有变量c,虚拟地址是否相同,物理地址是否相同

#include 
#include 
#include 
int main(int argc, const char *argv[])
{

  pid_t id_1=fork();
 if(id_1==0)
 {     
	 int c=100;
	 printf("子进程b的地址:%p  c=%d\n",&c,c);
 }
 else
 {   

	 int *p=&c;
	 printf("父进程b的地址:%p  c=%d\n",p,*p);
 }
	return 0;
}

结果:

zuoye2.c: In function ‘main’:
zuoye2.c:16:11: error: ‘c’ undeclared (first use in this function)
   16 |   int *p=&c;
      |           ^
zuoye2.c:16:11: note: each undeclared identifier is reported only once for each function it appears in

说明父进程里没有c变量。

4.实现ls -l

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
void get(mode_t mode)
{
	char str[]="rwx";
	for(int i=0;i<9;i++)
	{
		if((mode&(0400>>i))==0)
		{
			putchar('-');
			continue;
			
		}
			putchar(str[i%3]);
 
	}
	putchar(' ');	
	return;
}

void get_hong(mode_t m)
{
	switch (m & S_IFMT)
	{
	case S_IFBLK:  printf("b");        break;
	case S_IFCHR:  printf("c");        break;
	case S_IFDIR:  printf("d");        break;
	case S_IFIFO:  printf("p");        break;
	case S_IFLNK:  printf("l");        break;
	case S_IFREG:  printf("-");        break;
	case S_IFSOCK: printf("s");        break;
	default:       printf("unknown?\n");          break;
	}
 
}
int main(int argc, const char *argv[])
{
	if(argc<2)
	{
		printf("请输入需要打印的目录\n");
		return -1;
	}
	DIR *dp=opendir(argv[1]);
	if(NULL==dp)
	{
		perror("opendir");
		return -1;
	}
	struct dirent *rp=NULL;
	while(1)
	{
		rp=readdir(dp);
		if(NULL==rp)
		{
			if(0==errno)
			{
				printf("目录文件读取完毕\n");
				break;
			}
			else
			{
				perror("readdir");
				return -1;
			}
 
		}
		if(rp->d_name[0]=='.')
		{
			continue;
		}
		struct stat buf;
		char arr[30];
		strcpy(arr,argv[1]);
		strcat(arr,rp->d_name);
		int res=stat(arr,&buf);
		if(res<0)
		{
			perror("stat");
			return -1;
		}
		//打印文件权限
		get_hong(buf.st_mode);
		get(buf.st_mode);
		//硬连接数
		printf("%ld",buf.st_nlink);
		putchar(' ');

		struct passwd *pwd =getpwuid(buf.st_uid);
		if(NULL==pwd)
		{
			perror("getpwuid");
			return -1;
		}
		printf("%s",pwd->pw_name);
		putchar(' ');

		struct group *grp=getgrgid(buf.st_gid);
		if(NULL==grp)
		{
			perror("getgrgid");
			return -1;
		}
		printf("%s",grp->gr_name);
		putchar(' ');

		printf("%6ld",buf.st_size);
		putchar(' ');

		struct tm time;
		localtime_r(&buf.st_mtime,&time);
		printf(" %2d月  %2d %02d:%02d ",time.tm_mon+1,time.tm_mday,time.tm_hour,time.tm_min);
		printf("%s",rp->d_name);
		putchar(10);
 
	}
	closedir(dp);
 
   return 0;
}

结果:

linux@linux:~/hqyjC基础/IO/day4$ ./a.out ../day3/
-rwxrwxr-x 1 linux linux  92461   5月   4 14:04 2.jpg
-rw-rw-r-- 1 linux linux    726   5月   4 18:58 zuoye.c
-rwxrwxr-x 1 linux linux      0   5月   4 10:50 open.txt
-rw-rw-r-- 1 linux linux   1219   5月   5 10:10 zuoye1.c
-rw-rw-r-- 1 linux linux    621   5月   4 14:03 open_1.c
-rwxrwxr-x 1 linux linux  17112   5月   5 11:55 a.out
-rwxrwxr-x 1 linux linux    605   5月   4 13:53 1.c
-rw-rw-r-- 1 linux linux    538   5月   4 15:21 opendir_1.c
-rw-rw-r-- 1 linux linux   1307   5月   5 11:55 stat_01.c
目录文件读取完毕

你可能感兴趣的:(算法,c++,数据结构)