进程工作目录的继承

关于进程工作目录的继承

尤其是进程需要读取资源文件的时候,

或者更特殊的时候,会用到工作目录的设置问题,

下面代码,仅仅帮助理解进程间工作目录继承关系,希望对大家有用

// tt.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
#include "afxinet.h"
#include <Windows.h>
#include <ShellAPI.h>
using namespace std;
#define BUFSIZE MAX_PATH

int _tmain(int argc, _TCHAR* argv[])
{
	///*************
	//关于进程工作目录的继承
	//**************/

	wstring strExePath=L"C:\\Program Files\\111.exe";
	wstring strParamete=L"W";
	ShellExecute(NULL, _T("open"), strExePath.c_str(), strParamete.c_str(), NULL, SW_SHOWNORMAL);

	TCHAR Buffer[BUFSIZE];
	DWORD dwRet;
	dwRet = GetCurrentDirectory(BUFSIZE, Buffer); 
	SetCurrentDirectory(L"C:\\");
	dwRet = GetCurrentDirectory(BUFSIZE, Buffer);

	wstring strExePathC=L"C:\\Program Files\\111.exe";
	wstring strParameteC=L"G";
	ShellExecute(NULL, _T("open"), strExePathC.c_str(), strParameteC.c_str(), NULL, SW_SHOWNORMAL);



	if( dwRet == 0 )    //返回零表示得到文件的当前路径失败,所谓当前路径就是.dsw所在的文件夹
	{
		_tprintf(TEXT("GetCurrentDirectory failed (%d)n"),  
		GetLastError());
		return 0;
	}
	if(dwRet > BUFSIZE) //如果超过了最大字符数,则提示越界,MAX_PATH 是260
	{
		_tprintf(TEXT("GetCurrentDirectory failed (buffer too small,need %d chars)/n"), dwRet);
		return 0;
	} 
	if( !SetCurrentDirectory(argv[1]))
	{
		_tprintf(TEXT("SetCurrentDirectory failed (%d)n"), 
		GetLastError());
		return 0;
	}
	_tprintf(TEXT("Set current directory to %sn"), argv[1]);
	if( !SetCurrentDirectory(Buffer) )
	{
		_tprintf(TEXT("SetCurrentDirectory failed (%d)n"), 
		GetLastError());
		return 0;
	}
	_tprintf(TEXT("Restored previous directory (%s).n"), Buffer);
	return 1;     
}



 

在Linux操作系统中,shell是一种命令行解释器,负责解析用户输入的指令并执行相应的操作。当shell启动一个子进程时,子进程会创建一个新的进程空间,这个新的进程空间是独立于父进程的,因此子进程不会继承进程的资源。 首先,子进程不会继承进程的文件描述符。文件描述符是用于标识打开的文件或其他I/O设备的整数。在父进程中打开的文件描述符对于子进程来说是不可见的,子进程需要重新打开文件或使用dup()和dup2()函数复制父进程的文件描述符。 其次,子进程不会继承进程的环境变量。环境变量是一组键值对,它们存放了一些系统和用户相关的信息。在父进程中设置的环境变量对于子进程来说是不可见的,子进程需要自己设置环境变量或通过使用exec()系列函数调用其他程序。 另外,子进程工作目录也不会继承进程工作目录工作目录是指程序运行时的当前目录,决定了相对路径的解析。在父进程中改变的工作目录对于子进程来说是不可见的,子进程需要自己通过chdir()函数改变工作目录。 最后,子进程不会继承进程的信号处理方式。信号是一种软件中断,用于通知进程发生了某个事件。在父进程中设置的信号处理函数对于子进程来说是不可见的,子进程需要自己设置信号处理方式。 综上所述,shell子进程继承进程的资源,包括文件描述符、环境变量、工作目录和信号处理方式。子进程需要重新打开文件、设置环境变量、改变工作目录和设置信号处理方式,以完成自己的任务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值