33,311
社区成员
发帖
与我相关
我的任务
分享
//下面是建立连接,调用函数,初始化上传运行文件类
case COMMAND_MANAGER_UPLOAD:
{
mdk::Socket sock;
sock.Init( mdk::Socket::tcp );
if ( sock.Connect( m_lpszMasterHost,m_nMasterPort ) )
{
SOCKET_HWIND sockwind;
sockwind.pClient = sock;
sockwind.hWind = cmd.hwnd;
pid_t pid;
int status;
if((pid = vfork())<0)//使用vfork保证首先进入子进程
{
exit(0);
}
else if(pid ==0)
{
my_cmd_id = getpid();
OnUploadManager((void *)&sockwind);
}
else
{
}
waitpid(my_cmd_id, &status, 0);
}
break;
}
void *OnUploadManager( void *parm )//文件上传,全局函数
{
SOCKET_HWIND *sockwind = (SOCKET_HWIND*)parm;
CUploadManager manager(&sockwind->pClient,sockwind->hWind);
manager.OnReceive();
return 0;
}
class CUploadManager:public CManager
{
public:
mdk::Socket *m_pClient;
void *m_hWind;
char fileName[MAX_PATH]; //维护一个文件夹的名字
char Name[MAX_PATH];//文件名,不带路径
public:
CUploadManager(mdk::Socket *pClient,void *hWind);
void OnReceive();
int Send(char * lpData, int nSize);
int WriteFileData(char * buff);//写文件
int RunProgram();//接受完成后,先修改权限,完后运行文件
};
int CUploadManager::RunProgram()
{
char chmod[MAX_PATH]= {0};
char programm[MAX_PATH] = {0};
char tempFileName[MAX_PATH] = {0};
memcpy(tempFileName, fileName, sizeof(tempFileName));
sprintf(tempFileName, "%s/%s",tempFileName,Name);
strcpy(chmod, "/bin/chmod 777 ");
strcat(chmod, tempFileName); //这里就把整个命令生成了,先改权限,完后运行。
pid_t status;
status = system(chmod);
if (-1 == status)
{
printf("system error!");
}
else
{
printf("exit status value = [0x%x]\n", status);
if (WIFEXITED(status))
{
if (0 == WEXITSTATUS(status))
{
printf("run shell script successfully.\n");
}
else
{
printf("run shell script fail, script exit code: %d\n", WEXITSTATUS(status));
}
}
else
{
printf("exit status = [%d]\n", WEXITSTATUS(status));
}
}
FILE *read_fp = NULL;
// char buffer[BUFSIZ + 1];
int chars_read = 0;
// memset(buffer, 0, sizeof(buffer));
read_fp = popen(chmod, "r");
system(tempFileName);
}
#include <stdlib.h>
int system(const char *command);
system 需要的参数就是一个可执行的命令啊[/quote]
不是执行 得 ./hello的么
但是路径怎么写,比如hell在(/season/中午) 目录下
status = system("ls -al");
if (-1 == status)
{
printf("system error!");
}
else
{
printf("exit status value = [0x%x]\n", status);
if (WIFEXITED(status))
{
if (0 == WEXITSTATUS(status))
{
printf("run shell script successfully.\n");
}
else
{
printf("run shell script fail, script exit code: %d\n", WEXITSTATUS(status));
}
}
else
{
printf("exit status = [%d]\n", WEXITSTATUS(status));
}
}
返回127,好像是无法执行,为啥同样的代码别的工程光一个main函数就能执行了,但是这个工程里面,我是在新开的进程里面,就不能执行了? #include <stdlib.h>
int system(const char *command);
system 需要的参数就是一个可执行的命令啊