Skip to content

Commit

Permalink
清楚部分无用代码
Browse files Browse the repository at this point in the history
  • Loading branch information
thinszx committed Dec 28, 2020
1 parent 80ef265 commit a623a58
Show file tree
Hide file tree
Showing 7 changed files with 92 additions and 13 deletions.
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# winshell
操作系统课设
91 changes: 82 additions & 9 deletions exec1.c
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
#include "pch.h"
#include "winshell.h"
#include <stdio.h>
#include <Windows.h>

Expand Down Expand Up @@ -28,10 +29,65 @@ DWORD WaitForSingleObject(
{
wchar_t cmd[] = L"C:\\Windows\\System32\\cmd.exe";
#ifdef DEBUG
wchar_t arg[] = L" /C dir /W"; // cmd /K,保留窗口;cmd /C,关闭窗口
// 打开文件
FILE* fp;
errno_t err = fopen_s(&fp, "C:\\Users\\12176\\Desktop\\操作系统课设\\winshell\\test.sh", "r");
if (fp == NULL || err != 0) {
printf_s("Failed to open file!");
return -1;
}

STARTUPINFO si = { sizeof(si) };
int i = 0;
while (TRUE) {
char* buf = readline(fp);
if (buf == NULL)
break;
if (*buf == '\0') // 空行的情况
continue;

wchar_t* arg = generate_cmd(buf);
STARTUPINFO si = { sizeof(si) };

PROCESS_INFORMATION pi;
BOOL OK = CreateProcessW(cmd, arg, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi); // 运行有参数命令
//BOOL OK = CreateProcessW(NULL, cmd, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi); // 运行无参数命令,这行只是为了做笔记,其实这个程序根本用不到
if (OK) { // 进程创建成功
printf("Applicaiton is running\n");
printf("PID = %d\n", pi.dwProcessId);

// 等待进程结束,等待时间为永久
DWORD status = WaitForSingleObject(pi.hProcess, INFINITE);

if (status == WAIT_OBJECT_0) {
printf("PID = %d is closed!\n\n", pi.dwProcessId);
}
free(buf);
free(arg);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
}
else {
printf("Application NOT running! \t Error code %d", GetLastError());
}
/*
char** args = splitline(buf);
for (int i = 0; args[i] != NULL; i++) {
printf_s("arg[%d]%s\n", i, args[i]);
}
//printf_s("arg[%d]%s\n", i, args[i]);
freelist(args);*/
}/*
for (int i = 0; args[i] != NULL; i++) {
printf_s("arg[%d]%s\n", i, args[i]);
}*/
//test end
//printf_s(buf);
//printf_s(buf2);
//wchar_t arg[] = L" /C dir /W"; // cmd /K,保留窗口;cmd /C,关闭窗口
//wchar_t arg[] = generate_cmd(args);
/*
STARTUPINFO si = { sizeof(si) };
PROCESS_INFORMATION pi;
BOOL OK = CreateProcessW(cmd, arg, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi); // 运行有参数命令
//BOOL OK = CreateProcessW(NULL, cmd, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi); // 运行无参数命令,这行只是为了做笔记,其实这个程序根本用不到
Expand All @@ -51,15 +107,32 @@ DWORD WaitForSingleObject(
}
else {
printf("Application NOT running! \t Error code %d", GetLastError());
}
#endif
}*/
#endif
}

wchar_t* char2wchar(char* text, size_t* converted) {
const size_t size = strlen(text) + 1;
wchar_t* wtext = (wchar_t*)malloc_s(strlen(text)*sizeof(wchar_t));
mbstowcs_s(converted, wtext, size, text, _TRUNCATE);
return wtext;
}

// 用来生成可以被winapi - CreateProcessW所接收的字符串,方便通过cmd调用
/*
char* generate_cmd(char** arglist) {
int
char* cmdstr = (char*)malloc_s()
wchar_t* generate_cmd(char* str) {
size_t converted = 0;
wchar_t* cmdstr = char2wchar(str, &converted);
wchar_t* cmdall = malloc_s((3 + converted) * sizeof(wchar_t));
memset(cmdall, 0, sizeof(cmdall));
errno_t err = 0;
//wchar_t* cmdall = L"/C ";
err = wcscat_s(cmdall, 3+converted, L"/C ");
err = wcscat_s(cmdall, 3 + converted, cmdstr);
if (err != 0) {
printf_s("Failed to generate command line!");
return NULL;
}
return cmdall;
}
*/


2 changes: 1 addition & 1 deletion test.sh
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
ehco success in print; echo success in split line by \;
echo success in print; echo success in split line by \;

echo success in change line;
6 changes: 5 additions & 1 deletion winshell.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,8 @@ char* readline(FILE* fp);
char** splitline(char* line);
char* createstr(char* s, int l);
void* malloc_s(size_t n);
void* realloc_s(void* p, size_t n);
void* realloc_s(void* p, size_t n);

/* ¶¨ÒåÔÚexec.cÖÐ */
wchar_t* char2wchar(char* text, size_t* converted);
wchar_t* generate_cmd(char* str);
2 changes: 1 addition & 1 deletion winshell.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@
<ItemGroup>
<ClCompile Include="exec1.c" />
<ClCompile Include="splitline.c" />
<ClCompile Include="没用的api啥的.cpp" />
<ClCompile Include="没用的api啥的.c" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="pch.h" />
Expand Down
2 changes: 1 addition & 1 deletion winshell.vcxproj.filters
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
<ClCompile Include="splitline.c">
<Filter>源文件</Filter>
</ClCompile>
<ClCompile Include="没用的api啥的.cpp">
<ClCompile Include="没用的api啥的.c">
<Filter>源文件</Filter>
</ClCompile>
</ItemGroup>
Expand Down
File renamed without changes.

0 comments on commit a623a58

Please sign in to comment.