C语言中的createprocess()函数参数是什么?

作者&投稿:镡彩 (若有异议请与网页底部的电邮联系)
C语言中CreatProcess函数参数问题!急!!!!~

补充:
自己修改输出文件,要启动的控制台应用程序,每次检查是否有输出的时间间隔.最好改成带命令行参数的程序.

楼主,貌似用CreateProcess不行,看看我下面的代码
vc++6.0下编译运行测试通过
补充:"带命令行参数的程序"? 对本问题不起作用
输入问题很简单,再建立一个管道,把被创建进程的输入句柄替换为这个管道的输出句柄,具体程序我改天给出来

#include "windows.h"
#include
#define MAX_LENGTH 10240

int main()
{
FILE *f;

PROCESS_INFORMATION ProcessInformation;
SECURITY_ATTRIBUTES pipeattr;
HANDLE hReadPipe, hWritePipe;
STARTUPINFO si;

unsigned long lBytesRead;
char Buff[MAX_LENGTH];
int ret;

f = fopen("c:\esult.txt", "w");/*打开输出文件*/

if (!f)
{
printf("create file error!
");
return 1;
}

pipeattr.nLength = 12;
pipeattr.lpSecurityDescriptor = 0;
pipeattr.bInheritHandle = true;
CreatePipe(&hReadPipe, &hWritePipe, &pipeattr, 0);/*创建管道*/


ZeroMemory(&si, sizeof(si));
si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
si.wShowWindow = SW_HIDE;
si.hStdInput = NULL;
si.hStdOutput = si.hStdError = hWritePipe;/*把进程的输出信息接到管道上*/


if (CreateProcess("c:\\ansic.exe", NULL, NULL, NULL, 1, 0, NULL, NULL, &si, &ProcessInformation))
{/*创建进程*/
printf("create process successfully!
");
}
else
{
printf("create process error!
");
return 1;
}

Sleep(1000);/*先等待1秒,源程序在1秒内运行结束的话将没有输出,
所以最好在程序最后加一个system("pause")*/

while (Sleep(10), PeekNamedPipe(hReadPipe, Buff, MAX_LENGTH, &lBytesRead, 0, 0), lBytesRead)
/*每0.01秒检查是否有输出,如果有输出则写到文件,否则停止循环*/
if (lBytesRead)
{
ret = ReadFile(hReadPipe, Buff, lBytesRead, &lBytesRead, 0);
fwrite(Buff, lBytesRead, 1, f);
}

fclose(f);

return 1;
}

是windows调用的createprocess函数,并不是没有用createprocess函数。
《windows程序设计》摘抄:
操作系统事实上并不是真的调用main函数,而是去调用C/C++运行期启动函数,此函数初始化C/C++运行期库。因此,在应用程序中可以调用malloc和free之类的函数。它也会保证在用户的代码执行之前所有的全局的或静态的C++对象能够被正确的创建,即执行这些对象构造函数中的代码。
组成Win32进程的两个部分:

(1)进程内核对象。操作系统使用此内核对象来管理进程,也是操作系统存放进程统计信息的地方。

(2)私有的虚拟地址空间。此地址空间包含了所有可执行的或者是DLL模块的代码和数据,它也是程序动态申请内存的地方,比如说线程堆栈和进程堆。

在控制台应用程序中,C/C++运行期启动函数会调用程序入口函数main,所以如果程序中没有main函数的实现代码的话,连接器将返回“unresolved external symbol”错误。Win32应用程序的启动过程就是进程的创建过程,操作系统是通过调用CreateProcess函数来创建新的进程的。当一个线程调用CreateProcess函数的时候,系统会创建一个进程内核对象,其使用计数初始化为1.此进程内核对象不是进程本身,仅仅是一个系统用来管理这个进程的一个小的数据结构(PCB,Process Control Block)。系统然后会为新的进程创建一个虚拟地址空间,加载应用程序运行时所需的代码和数据。

系统接着会为新进程创建一个主线程,这个主线程通过执行C/C++运行期启动代码开始运行,C/C++运行期启动代码又会调用main函数。如果系统能够成功创建新的进程和进程的主线程,CreateProcess函数返回TRUE,否则返回FALSE。

#include <windows.h>

BOOL CreateProcess
(
LPCTSTRlpApplicationName,
LPTSTRlpCommandLine,
LPSECURITY_ATTRIBUTES lpProcessAttributes。
LPSECURITY_ATTRIBUTES lpThreadAttributes,
BOOL bInheritHandles,
DWORD dwCreationFlags,
LPVOID lpEnvironment,
LPCTSTR lpCurrentDirectory,
LPSTARTUPINFO lpStartupInfo,
LPPROCESS_INFORMATION lpProcessInformation
);
详见百度百科

#include <windows.h>

BOOL CreateProcess
(
LPCTSTRlpApplicationName,
LPTSTRlpCommandLine,
LPSECURITY_ATTRIBUTES lpProcessAttributes。
LPSECURITY_ATTRIBUTES lpThreadAttributes,
BOOL bInheritHandles,
DWORD dwCreationFlags,
LPVOID lpEnvironment,
LPCTSTR lpCurrentDirectory,
LPSTARTUPINFO lpStartupInfo,
LPPROCESS_INFORMATION lpProcessInformation
);

#include <stdio.h>
#include <windows.h>
int main(int argc, char *argv[])
{
char szCommandLine[] = "notepad";
STARTUPINFO si = { sizeof(si) };
PROCESS_INFORMATION pi;
si.dwFlags = STARTF_USESHOWWINDOW; // 指定wShowWindow成员有效
si.wShowWindow = TRUE; // 此成员设为TRUE的话则显示新建进程的主窗口
BOOL bRet = CreateProcess (
NULL, // 不在此指定可执行文件的文件名
szCommandLine, // 命令行参数
NULL, // 默认进程安全性
NULL, // 默认进程安全性
FALSE, // 指定当前进程内句柄不可以被子进程继承
CREATE_NEW_CONSOLE, // 为新进程创建一个新的控制台窗口
NULL, // 使用本进程的环境变量
NULL, // 使用本进程的驱动器和目录
&si,
&pi) ;
if(bRet)
{
// 不使用的句柄最好关掉
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
printf("新进程的ID号:%d\n",pi.dwProcessId);
printf("新进程的主线程ID号:%d\n",pi.dwThreadId);
}
return 0;
}

这是百度百科的例子,看一下具体的参数说明就明白了!

查MSDN啊,我查到的如下:
BOOL CreateProcess(
LPCTSTR lpApplicationName,
LPTSTR lpCommandLine,
LPSECURITY_ATTRIBUTES lpProcessAttributes,
LPSECURITY_ATTRIBUTES lpThreadAttributes,
BOOL bInheritHandles,
DWORD dwCreationFlags,
LPVOID lpEnvironment,
LPCTSTR lpCurrentDirectory,
LPSTARTUPINFO lpStartupInfo,
LPPROCESS_INFORMATION lpProcessInformation);

RequirementsClientRequires Windows XP, Windows 2000 Professional, Windows NT Workstation, Windows Me, Windows 98, or Windows 95.ServerRequires Windows Server 2003, Windows 2000 Server, or Windows NT Server.HeaderDeclared in Winbase.h; include Windows.h.
Library
Link to Kernel32.lib.
DLLRequires Kernel32.dll. Unicode
Implemented as CreateProcessW (Unicode) and CreateProcessA (ANSI). Note that Unicode support on Windows Me/98/95 requires Microsoft Layer for Unicode.


...建立单向链表,图中倒数第二行 struct list *creat( )什么意思?creat...
就是说 这个函数不需要参数 只要调用就固定执行函数体里面的内容并返回对应的值 不需要任何参数输入 这个是很常见的 叫无参函数 调用的时候直接 struct list * head = creat();这样就可以了

C语言中CreatProcess函数参数问题!急!!!
补充:自己修改输出文件,要启动的控制台应用程序,每次检查是否有输出的时间间隔.最好改成带命令行参数的程序.楼主,貌似用CreateProcess不行,看看我下面的代码 vc++6.0下编译运行测试通过 补充:"带命令行参数的程序"? 对本问题不起作用 输入问题很简单,再建立一个管道,把被创建进程的输入句柄替换为这个...

C语言怎么让一个函数返回指针
这种方式叫做“用指针函数*creat()的返回值来传递动态内存”,这是一个C语法 首先你要注意,子函数*creat()用了malloc动态申请内存,而return返回的是指针变量所指向的地址,而不是指针!相当于将你所申请的动态内存返回给主函数 int *fun(void)\/\/这里是指针函数 { int *p = (int *) malloc ...

C语言中creatlist的用法
1、createlist不是库函数,一般是数据结构中实现新建一个链表的自定义函数。因此没有什么用法好说的,关键是看自己怎么定义。2、例程:NODE *creatlist(int a[]){ NODE *h,*p,*q;int i;h=(NODE *)malloc(sizeof(NODE));h->next=NULL;for(i=0;i<N;i++){q=(NODE *)malloc(sizeof(...

是C语言中建立顺序表的程序
void creat(Seqlist &L){ int a;printf("请输入要创建的元素的个数:\\t");scanf("%d",&a);for(int i=0;i<a;i++){ printf("请输入第%d个元素\\t",i+1);scanf("%d",&L.data[i]);L.length++;} } void show(Seqlist L){ int i;printf("线性表中的元素为:\\n");for(i=0...

为什么在VC++6.0下用C语言调用引用参数如:void Creat(SqList &L)总是...
你好:C 语言环境不提供这样的引用参数方式,只有 C++ 环境才有。修改方法其实很简单:第一步将参数中的 &L 变为 *L(赋地址调用方式),即 void Creat(Sqlist *L);第二步将函数体内部的所有 L 变为 *L(L 为地址值,*L 取对应内存单元的内容)。第三步将主调函数调用部分的变量加入取地址...

请大侠解释一下,C语言中该语句: int flag=O_CREAT|O_TRUNC|O_WRONLY...
O_CREAT :Creates and opens a new file for writing; this has no effect if the file specified by filename exists O_TRUNC :Opens and truncates an existing file to zero length; the file must have write permission. The contents of the file are destroyed. If this flag is given,...

C语言中“->”与“.”的区别
定义一个结构体指针类型,如struct List *p;调用其中的方法是用->,即p->Creat();如定义的是结构体变量的话,如struct List abc;调用其中的方式是用.即abc.Creat();

c语言中创建动态链表
将以上建立,输出,删除,插入的函数组织在一个程序中,用main函数作主调函数.可以写出以下main函数. main() {struct student *head,stu; 1ong de1_num; printf("input records:\\n"); head=creat(); \/*返回头指针*\/ print(head); \/*输出全部结点*\/ printf("\\ninput the deleted 0number:"); scanf("...

C语言中编写两个函数
printf("->%d",p->data);\/*输出当前结点数据域中的值*\/ p=p->next;\/*p指向下一个结点*\/ }while(p!='\\0');\/*未到链表尾,继续循环*\/ printf("->end\\n");} } int main(){ SLIST *p;p=creat();take(p);} 我在我的VS2010里面编译运行,没有崩溃 输入 2 3 1 输出 head->...

洋县19684818879: C语言中的createprocess()函数参数是什么? -
利谈华士: 头文件:Winbase.h BOOL CreateProcess ( LPCTSTR lpApplicationName,LPTSTR lpCommandLine,LPSECURITY_ATTRIBUTESlpProcessAttributes. LPSECURITY_ATTRIBUTESlpThreadAttributes,BOOLbInheritHandles,...

洋县19684818879: C语言中CreatProcess函数参数问题!急!!!!
利谈华士: 其实system函数执行之后,就会返回到你的程序了,这个函数是阻塞的.还有更灵活一些的,比如ShellExecuteEx,这个应该是非阻塞的,但是可以通过WaitForSingleObject使他变为阻塞.如果windows程序,也可以用CreatProcess() 那你看...

洋县19684818879: C语言中creatlist的用法 -
利谈华士: 1、createlist不是库函数,一般2113是数据结构中实现新建一5261个4102链表的自定义函数.因此没有什么1653用法好说的,关键是专看自己怎么定义.属2、例程: NODE *creatlist(int a[]) { NODE *h,*p,*q;int i; h=(NODE *)malloc(sizeof(...

洋县19684818879: C语言编程 图的创建与遍历 -
利谈华士: 在C语言编程中,图的创建和遍历: #include<stdio.h> #define N 20 #define TRUE 1 #define FALSE 0 int visited[N]; typedef struct /*队列的定义*/ { int data[N]; int front,rear; }queue; typedef struct /*图的邻接矩e799bee5baa6e4b893e5b19e...

洋县19684818879: C语言与节点有关的程序 -
利谈华士: (1)struct link *next;(2)p=(struct link *)malloc(sizeof(struct link));(3)p->next=head->next;(4)return head;(5)p=p->next;(6)base=creat();(7)new=base->next; base->next=new->next; free(new);(8)printlist(base);

洋县19684818879: 关于c语言中链表子函数create. -
利谈华士: 结构体定义最后要加分号的 如 struct A { int a; };//这里要分号

洋县19684818879: 关于c语言树的建立及操作 -
利谈华士: //---------------------------------------------------------------------------#include #include typedef struct np{ int dat; struct np *left,*right; } node; node *create(void) { return (malloc(sizeof(node))); } node *t(node *a,int d)/*建立二叉树*/ { if (a==NULL) { a=create(); a->...

洋县19684818879: 用c语言创建一个顺序表,并完成创建,显示,查找,插入,删除,退出等任务 -
利谈华士: #include<stdio.h> int n=0; //全局变量数组中元素个数 /***************************函数说明************************/ void insert(int * ss); void show(int *ss); void delete(int * ss); void updata(int * ss); /***************************主 函 数**************************/...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网