UC编程6-目录操作和创建子进程fork()函数1

简介: //myuc.h #include//io流#include//标准库#include//uc标准头文件#include//文件控制#include//c字符串#include#include//内存映射#include//文件...

//myuc.h

#include<stdio.h>//io流
#include<stdlib.h>//标准库
#include<unistd.h>//uc标准头文件
#include<fcntl.h>//文件控制
#include<string.h>//c字符串
#include<sys/types.h>
#include<sys/mman.h>//内存映射
#include<sys/stat.h>//文件状态信息
#include<sys/wait.h>//进程等等
#include<dirent.h>//目录操作
#include<signal.h>//信号
#include<sys/time.h>//时间,计时器
#include<sys/ipc.h>//ipc进程间通信
#include<sys/shm.h>//共享内存段
#include<sys/msg.h>//消息队列

//operatordir6.c

#include "myuc.h"
void test1()
{
	DIR* dir=opendir("./");
	if(dir==NULL) perror("opendir"),exit(-1);
	struct dirent * ent;
	while(ent=readdir(dir))//
	{
		//类型4:目录,8:文件
		printf("type:%d,name:%s\n",ent->d_type,ent->d_name);
	}
}
//递归显示目录
void print(const char* name){
	printf("dir:[%s]\n",name);	
	DIR* dir=opendir(name);
	if(dir==NULL) {perror("opendir");return;}
	struct dirent * ent;
	while(ent=readdir(dir))//
	{
		//类型4:目录,8:文件
			if(ent->d_type!=4)
			{
				printf("type:%d,name:%s\n",ent->d_type,ent->d_name);
			}
			else if(ent->d_type==4&& strcmp(ent->d_name,".")
					&&strcmp(ent->d_name,".."))
			{
			//printf("dir:[%s]\n",ent->d_name);
			char pd[256]={};
			strcpy(pd,name);
			if(name[strlen(name)-1]!='/') strcat(pd,"/");
			//拼接子目录相对地址
			strcat(pd,ent->d_name);
			strcat(pd,"/");
			//printf("pd:%s\n",pd);
			print(pd);
			}
	}
}
int main()
{
	//test1();
	print("../c");
	return 0;
}

//fork6.c

#include "myuc.h"
void test1()
{
	pid_t pid=fork();//调用一次返回两次,
	//如果当前进程是父进程,则返回子进程id,如果当前是子进程 ,则返回0
	if(pid==0) {//子进程
		   sleep(2);	
			printf("1子进程id:%d\n",getpid());
			printf("1父进程id:%d\n",getppid());
	}
	else{
			printf("2父进程id:%d\n",getpid());
			printf("2子进程id:%d\n",pid);
	}
	sleep(1);//如果父进程运行完毕退出了,子进程的父进程会变化。
	//return 0;
}
int i=10;
void test2()
{
	int i2=10;
	int *pi=malloc(4);
	*pi=10;//fork之前,复制的变量,地址一样的
	pid_t pid=fork();
	int i4=10;//fork之后,不是复制,地址可能不一样
	if(pid==0){
		i=20;i2=20;*pi=20;i4=20;
		printf("1:i=%d,i2=%d,*pi=%d,i4=%d\n",
						i,i2,*pi,i4);
		printf("1:%p,%p,%p,%p\n",&i,&i2,pi,&i4);
		exit(0);//退出子进程
	}
		printf("2:i=%d,i2=%d,*pi=%d,i4=%d\n",
						i,i2,*pi,i4);
		printf("2:%p,%p,%p,%p\n",&i,&i2,pi,&i4);

	sleep(2);
}
void test3()
{
	pid_t pid=fork();
	int fd=open("a.txt",O_RDWR|O_CREAT,0700);
	if(fd==-1) perror("open"),exit(-1);
	//pid_t pid=fork();
	if(pid==0){
		write(fd,"abc",3);
		close(fd);
		exit(0);
	}
		write(fd,"def",3);
		close(fd);
	sleep(1);
}

int main()
{
	test1();
	//test2();
	//test3();
	return 0;

}



相关文章
|
12天前
|
安全 Java 数据处理
Python网络编程基础(Socket编程)多线程/多进程服务器编程
【4月更文挑战第11天】在网络编程中,随着客户端数量的增加,服务器的处理能力成为了一个重要的考量因素。为了处理多个客户端的并发请求,我们通常需要采用多线程或多进程的方式。在本章中,我们将探讨多线程/多进程服务器编程的概念,并通过一个多线程服务器的示例来演示其实现。
|
1月前
|
Linux
进程等待(wait和wait函数)【Linux】
进程等待(wait和wait函数)【Linux】
|
1月前
|
消息中间件 Linux
Linux进程间通信(IPC)教程 Linux共享内存介绍:介绍POSIX共享内存的基本概念、用途和编程实践
Linux进程间通信(IPC)教程 Linux共享内存介绍:介绍POSIX共享内存的基本概念、用途和编程实践
22 2
|
1月前
|
存储 Linux 程序员
Linux进程间通信(IPC)教程 Linux信号量:讲解POSIX信号量在Linux系统进程间通信中的编程实践
Linux进程间通信(IPC)教程 Linux信号量:讲解POSIX信号量在Linux系统进程间通信中的编程实践
20 1
|
1月前
|
安全 程序员 数据处理
深入探索Python多进程编程:理论与实践
深入探索Python多进程编程:理论与实践
36 2
|
1月前
|
Python
Python实现多线程或多进程编程。
Python实现多线程或多进程编程。
17 0
|
1月前
|
Linux 数据安全/隐私保护
进程间通信之共享内存及其shm函数的使用【Linux】
进程间通信之共享内存及其shm函数的使用【Linux】
|
1月前
|
Java Linux Shell
进程的程序替换(exec函数)【Linux】
进程的程序替换(exec函数)【Linux】
|
2月前
火山中文编程 -- 创建进程
火山中文编程 -- 创建进程
12 0
|
2月前
|
安全 Windows 容器
win32编程 -- 进程
win32编程 -- 进程
18 0

相关实验场景

更多