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

//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;

}
时间: 2024-08-31 05:06:09

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

【操作系统】linux创建子进程--fork()方法

(1)fork()的定义 fork()函数是Unix中派生新进程的唯一方法,声明如下:   [cpp] view plaincopy   #include <unistd.h>      pid_t fork(void);   我们需要理解的是,调用一次fork()方法,该方法会返回两次.一次是在调用进程(也就是派生出的子进程的父进程)中返回一次,返回值是新派生的进程的进程ID.一次是在子进程中返回,返回值是0,代表当前进程为子进程.如果返回值为-1的话,则代表在派生新进程的过程中出错.  

UC编程02-环境变量、errno错误查看函数

#include<stdio.h> #include<string.h> #include<stdlib.h> //extern char**envron; //第三个参数为环境表首地址 int main(int argc,char ** argv,char **env){ extern char** environ;//外部全局变量,不改动 char **p=environ; //输出所有环境变量 /* while(*p!=NULL){ printf("%s

Nginx学习笔记(七) 创建子进程

Nginx创建子进程 ngx_start_worker_processes位于Nginx_process_cycle.c中,主要的工作是创建子进程. 在Nginx中,master进程和worker进程是通过socketpair函数创建一对socket来实现,父进程与子进程之间的通信的.而这对socket被保存在进程结构体ngx_process中的channel[2]数组中,其中channel[0]为父进程的socket,channel[1]为子进程的socket. static void ngx

UC编程7-进程创建函数fork/vfork 和 execl/信号signal的使用1

//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>//文件状

UC编程9-管道pipe操作和共享内存段shm操作

//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>//文件状

PHP 创建文件(文件夹)以及目录操作代码_php技巧

一.目录操作 首先是从目录读取的函数,opendir(),readdir(),closedir(),使用的时候是先打开文件句柄,而后迭代列出: 复制代码 代码如下: <?php $base_dir="filelist/"; $fso=opendir($base_dir); echo $base_dir."<hr/>"; while($flist=readdir($fso)){ echo $flist."<br/>";

C#中Directory类目录操作(复制\重命名\创建\删除)

Directory 类用于典型操作,如复制.移动.重命名.创建和删除目录.也可将 Directory 类用于获取和设置与目录的创建.访问及写入操作相关的 DateTime 信息. 由于所有的 Directory 方法都是静态的,所以如果只想执行一个操作,那么使用 Directory 方法的效率比使用相应的 DirectoryInfo 实例方法可能更高.大多数 Directory 方法要求当前操作的目录的路径. 例  代码如下 复制代码 //1.---------文件夹创建.移动.删除------

php中目录操作函数(删除,创建,判断)

本文章主要是介绍在php教程目录操作函数 is_dir,rd_dir,mkdir等常用的目录操作函数实例介绍. */ function dir_writeable($dir)      //自定义函数扩展功能,建立可写的目录 {   if(!is_dir($dir))        //如果给定的参数不是目录   {     @mkdir($dir,0777);       //创建目录  echo "目录".$dir."建立成功!";   } } dir_writ

PHP教程:PHP的目录操作和文件操作

一.引论 在任何计算机设备中,文件是都是必须的对象,而在web编程中,文件的操作一直是web程序员的头疼的地方,而,文件的操作在cms系统中这是必须的,非常有用的,我们经常遇到生成文件目录,文件(夹)编辑等操作,现在我把php中的这些函数做一详细总结并实例示范如何使用.,关于对应的函数详细介绍,请查阅php手册.此处只总结重点.和需要注意的地方.(这在php手册是没有的.) 二.目录操作 首先介绍的是一个从目录读取的函数,opendir(),readdir(),closedir(),使用的时候是