精华内容
下载资源
问答
  • }这时候运行的时候,由于Program Files之间有空格,会被分开来读做 D://Program 和Files,运行结果会是:不是内部或外部命令,也不是可运行的程序。 解决方法是在第一个“的后面和第二个”的前面加上/":

     

    例如有如下程序
    #include <windows.h>
    int main()
    {
     system("D://Program Files//mydata.exe");
    }

    这时候运行的时候,由于Program Files之间有空格,会被分开来读做 D://Program 和Files,运行结果会是:不是内部或外部命令,也不是可运行的程序。

     

    解决方法是在第一个“的后面和第二个”的前面加上/":

     system("/“D://Program Files//mydata.exe/"");
    就可以了

     

     

    展开全文
  • get方法外部程序(c语言)例子 post方法服务器端程序 post方法外部程序(c语言)例子 CGI定义 是用于WEB服务器和外部应用之间信息交换的标准接口。物理上是一段程序。 CGI功能 简单功能:计数器、生成包含日期、...

    目录

    CGI定义

    CGI功能  

    CGI编程

    GET方法:

    POST方法

    实战

    get方法服务端代码

    get方法外部程序(c语言)例子

    post方法服务器端程序

    post方法外部程序(c语言)例子


    CGI定义

    是用于WEB服务器和外部应用之间信息交换的标准接口。物理上是一段程序。

    CGI功能  

    简单功能:计数器、生成包含日期、天气等的页面

    中等难度的功能:图象映象、动画

    高级任务:后端数据库操作、搜索引擎、多重动态页面

    CGI编程

    GET方法:

    使用GET方法向CGI程序发送数据时,client端的数据是作为URL的一部分进行发送的。

    WEB服务器通过QUERY_STRING将数据发送给相应的CGI程序。

    REQUEST_METHOD为GET。

    输入数据的长度有限制:由SERVER本身的buffer size决定 (一般用于同样输入产生同样结果的表单,如查询数据库)

    POST方法

    由标准输入将FORM表单数据传给CGI。

    QUERY_STRING变量为空

    传送数据的量由环境变量中的Content_length决定

    REQUEST_METHOD为POST (POST方式用于每次请求都有不同结果输出的表单)

    实战

    服务器中的get响应cgi

    1,将要get的数据(如url中的部分数据)放入到提前约定好的环境变量中

    2,建立进程间通信,

    3,调用第三方程序

    服务器中的post响应cgi

    1,创建一个子进程向当前进程输入信息(管道)

    2,重定向(管道)到当前进程的标准输入

    3,创建一个子进程,重定向这个子进程的标准输出到另一个通道

    4,通过通道读取第二个子进程输出的内容

    get方法服务端代码

    void get_dynamic(int fd, char *filename, char *cgiargs) 
    {
        char buf[MAXLINE], *emptylist[] = { NULL },httpsbuf[MAXLINE];
        int p[2];
    
        /* Return first part of HTTP response */
        sprintf(buf, "HTTP/1.0 200 OK\r\n");
        sprintf(buf, "%sServer: Tiny Web Server\r\n",buf);
    
        #ifdef HTTPS 
        if(ishttps)
        	SSL_write(ssl,buf,strlen(buf));
        else
        #endif
           	Rio_writen(fd, buf, strlen(buf));
    	
        #ifdef HTTPS 
        if(ishttps)
        {
        	Pipe(p);//进程间通信管道
           	if (Fork() == 0)
    	{  /* child  */ 
    		Close(p[0]);
    		setenv("QUERY_STRING", cgiargs, 1); //设置内容到环境变量
    		Dup2(p[1], STDOUT_FILENO);         /* 重定向子进程管道到标准输出 */
    		Execve(filename, emptylist, environ); /* 调用第三方子进程 */	
    	}
    	Close(p[1]);
    	Read(p[0],httpsbuf,MAXLINE);   /* 父进程读取管道中的内容 */
    	SSL_write(ssl,httpsbuf,strlen(httpsbuf));
        }
        else
        #endif
        {
    	if (Fork() == 0) 
    	{ /* child */
    		/* Real server would set all CGI vars here */
    		setenv("QUERY_STRING", cgiargs, 1); 
    		Dup2(fd, STDOUT_FILENO);         /* Redirect stdout to client */
    		Execve(filename, emptylist, environ); /* Run CGI program */
    	}
        }
        //Wait(NULL); /* Parent waits for and reaps child */
    }

    get方法外部程序(c语言)例子

    #include "wrap.h"
    #include "parse.h"
    
    int main(void) 
    {
        char *buf, *p;
        char name[MAXLINE], passwd[MAXLINE],content[MAXLINE];
    
        /* 读取约定环境变量中的内容 */
        if ((buf = getenv("QUERY_STRING")) != NULL) {
    	p = strchr(buf, '&');
    	*p = '\0';
    	strcpy(name, buf);
    	strcpy(passwd, p+1);
        }
    
    
        /* 输入内容到重定向后的标准输出 */
        sprintf(content, "Welcome to auth.com:%s and %s\r\n<p>",name,passwd);
        sprintf(content, "%s\r\n", content);
    
        sprintf(content, "%sThanks for visiting!\r\n", content);
      
        printf("Content-length: %d\r\n", strlen(content));
        printf("Content-type: text/html\r\n\r\n");
        printf("%s", content);
        fflush(stdout);
        exit(0);
    }
    

    post方法服务器端程序

    static void post_dynamic(int fd, char *filename, int contentLength,rio_t *rp)
    {
        char buf[MAXLINE],length[32], *emptylist[] = { NULL },data[MAXLINE];
        int p[2];
    
        #ifdef HTTPS 
        int httpsp[2];
        #endif
    
        sprintf(length,"%d",contentLength);
        memset(data,0,MAXLINE);
    
        Pipe(p);
    
        /*       The post data is sended by client,we need to redirct the data to cgi stdin.
        *  	 so, child read contentLength bytes data from fp,and write to p[1];
        *    parent should redirct p[0] to stdin. As a result, the cgi script can
        *    read the post data from the stdin. 
        */
    
        /* 创建一个子进程向当前进程输入内容 */
       
        	if (Fork() == 0)
    	{                     /* child  */ 
    		Close(p[0]);
    		#ifdef HTTPS 
    		if(ishttps)
    		{
    			Write(p[1],httpspostdata,contentLength);	
    		}
    		else
    		#endif
    		{
    			Rio_readnb(rp,data,contentLength);
    			Rio_writen(p[1],data,contentLength);
    		}
    		exit(0)	;
    	}
        
        /* Send response headers to client */
        sprintf(buf, "HTTP/1.0 200 OK\r\n");
        sprintf(buf, "%sServer: Tiny Web Server\r\n",buf);
    
        #ifdef HTTPS 
        if(ishttps)
        	SSL_write(ssl,buf,strlen(buf));
        else
        #endif
            Rio_writen(fd, buf, strlen(buf));
    
        //Wait(NULL);
        Dup2(p[0],STDIN_FILENO);  /* 重定向管道 p[0] 到当前进程的标准输入 */
        Close(p[0]);
    
        Close(p[1]);
        setenv("CONTENT-LENGTH",length , 1); 
    
        #ifdef HTTPS 
        if(ishttps)  /* if ishttps,we couldnot redirct stdout to client,we must use SSL_write */
        {
        	Pipe(httpsp);
    
    	if(Fork()==0)
    	{
        		Dup2(httpsp[1],STDOUT_FILENO);        /* 重定向当前进程的标准输出到管道 */ 
    		Execve(filename, emptylist, environ); 
    	}
    	//Wait(NULL);
    	Read(httpsp[0],data,MAXLINE);
    	SSL_write(ssl,data,strlen(data));
        }
        else
        #endif
        {
        	Dup2(fd,STDOUT_FILENO);        /* Redirct stdout to client */ 
    	Execve(filename, emptylist, environ); 
        }
    }

    post方法外部程序(c语言)例子

    #include "wrap.h"
    #include "parse.h"
    
    int main(void) {
        char *buf,*p;
        int length=0;
        char content[MAXLINE],data[MAXLINE];
    
    
        if ((buf = getenv("CONTENT-LENGTH")) != NULL)
        {
        	length=atol(buf);
        }
        
        p=fgets(data,length+1,stdin);
        if(p==NULL)
        	sprintf(content, "Something is wrong\r\n");
        else	
    	sprintf(content, "Info:%s\r\n",data);
    
        printf("Content-length: %d\r\n", strlen(content));
        printf("Content-type: text/html\r\n\r\n");
        printf("%s", content);
        fflush(stdout);
        exit(0);
    
    }
    

     

    展开全文
  • 近来,因为需要用到调用外部应用程序 ,故在查询一些办法 ,如何才能用C语言调用外部应用,shell和bat都可以直接写上去 ,故也想到 system 利用system来进行外部应用程序的调用  #include system("xxx"); 这...

    近来,因为需要用到调用外部应用程序 ,故在查询一些办法 ,如何才能用C语言调用外部应用,shell和bat都可以直接写上去  ,故也想到  system

    利用system来进行外部应用程序的调用 

    #include <stdlib.h>
    
    system("xxx");
    这相当于打开了DOS窗口  再输入了XXX  因此总是会出现DOS窗口闪过    查过诸方办法  终于找到了解决办法  如何去除dos而又能外部调用   

    首先   system()是不行了   选用了ShellExecuteA()

    方法如下:

    首先把VS属性打开

    “配置属性”->“链接器”->“系统”->“子系统”选择“Windows(/SUBSYSTEM:WINDOWS)”

    “高级”选项中添加“入口点”:mainCRTStartup

    同时记住入口主函数为mian()

    加入头文件

    #include <shellapi.h>

    加入代码

    	ShellExecuteA(NULL, "open","XXXX",NULL,NULL, SW_HIDE);
    在很多编译器中  都是ShellExecute   VS10中是ShellExecuteA


    展开全文
  • 调用外部程序并传入数据,然后获取输出。需要用到 dstring(https://blog.csdn.net/stevenldj/article/details/113811194) // 编译:gcc main.c dstring.c -o main #include <stdio.h> // perror() #include...

    调用外部程序并传入数据,然后获取输出。需要用到 dstring(https://blog.csdn.net/stevenldj/article/details/113811194)

    // 编译:gcc  main.c  dstring.c  -o main
    
    #include <stdio.h>      // perror()
    #include <stdlib.h>     // exit()
    #include <unistd.h>     // pipe()  fork()  close()  STDOUT_FILENO  dup2()  execl()  read()
    #include <sys/wait.h>   // wait()
    #include <string.h>     // strlen()
    #include "dstring.h"
    
    // 运行程序并获取输出
    // 参数:程序命令
    char* run1(char* cmd) {
        // 创建动态字符串
        const int BUF_SIZE = 1024;
        char *buf = newds(BUF_SIZE);
    
        // 执行命令
        FILE *fp = popen(cmd, "r");
    
        // 读取程序输出的数据
        size_t n;
        while ((n = fread(dsendp(buf), 1, BUF_SIZE, fp)) > 0){
            dslen(buf) += n;
            growds(&buf, BUF_SIZE);
        }
        pclose(fp);
    
        // 返回读取结果
        return buf;
    }
    
    // 运行程序并获取输出
    // 参数:程序命令、传递给程序的数据(NULL 表示不传递数据)
    char* run2(char* cmd, char *in) {
        // 创建管道
        int fdi[2];
        int fdo[2];
        int ret;
    
        if (pipe(fdi) == -1) {
            perror("pipe error");
            exit(1);
        }
    
        if (pipe(fdo) == -1) {
            perror("pipe error");
            exit(1);
        }
    
        // 创建子進程
        pid_t pid = fork();
    
        if (pid == -1) {
            // 進程创建失败
            perror("fork error");
            exit(1);
        } else if (pid == 0) {
            // 子進程
            close(fdo[0]);  // 关闭 fdo 读端
            close(fdi[1]);  // 关闭 fdi 写端
    
            // 确保 fdo[1] 是 stdout
            if (fdo[1] != STDOUT_FILENO) {
                if (dup2(fdo[1], STDOUT_FILENO) != STDOUT_FILENO) {
                    perror("run(): dup2 error");
                    exit(1);
                }
                close(fdo[1]);
            }
    
            // 确保 fdi[0] 是 stdin
            if (fdi[0] != STDIN_FILENO) {
                if (dup2(fdi[0], STDIN_FILENO) != STDIN_FILENO) {
                    perror("run(): dup2 error");
                    exit(1);
                }
                close(fdi[0]);
            }
    
            // 执行命令
            if (execl("/bin/sh", "sh", "-c", cmd, NULL) == -1) {
                perror("run(): execl error");
                exit(1);
            }
    
            close(fdo[1]);
            close(fdi[0]);
        } else {
            // 父進程
            close(fdo[1]);  // 关闭 fdo 写端
            close(fdi[0]);  // 关闭 fdi 读端
    
            size_t n;
            // 向子程序传递数据
            if (in) {
                n = write(fdi[1], in, strlen(in));
                if (n == 0) {
                    perror("run() write error");
                    exit(1);
                }
            }
            // 数据传递完毕
            close(fdi[1]);
    
            // 创建动态字符串
            const int BUF_SIZE = 1024;
            char* buf = newds(BUF_SIZE);
    
            // 读取管道内容
            while ((n = read(fdo[0], dsendp(buf), BUF_SIZE)) > 0) {
                dslen(buf) += n;
                growds(&buf, BUF_SIZE);
            }
    
            // 数据读取完毕
            close(fdo[0]);
    
            // 等等子進程结束
            wait(NULL);
    
            // 返回读取结果
            return buf;
        }
    }
    
    int main() {
        char* ds;
    
        ds = run1("echo Hello World!\n");
        if (ds)  printf(ds);
    
        ds = run2("echo Hello World!\n", NULL);
        if (ds)  printf(ds);
    
        ds = run2("cat", "Hello World!\n");
        if (ds)  printf(ds);
    
        freenil(&ds);
    
        return 0;
    }
    
    展开全文
  • /*线程的外部标识符*/ unsigned char *stack; /*堆栈的起始地址*/ unsigned sp,ss; /*ss:堆栈段址;sp:堆栈指针*/ int value; /*进程的优先权*/ char state; /*进程状态*/ struct TCB *next; /*进程TCB链队...
  • 如题,如何实现在qt界面内调用触摸屏校准程序,屏幕能否切换到校准界面?
  • Linux调用外部程序并获得返回值 最近在使用C语言写一个项目,但其中需要用C++写一个小程序,需要获取这个小程序的运行结果。试了些方法也没办法把这段小程序嵌入这个项目,所以决定单独写一段C++小程序,编译完成后...
  • //这是外部程序所在目录,切记返回类型为process  PrintStream outputWriter = new PrintStream(new BufferedOutputStream(process.getOutputStream()));  outputWriter.println("XXXX");  outputWriter....
  • 所以我在实际使用中一般都把Lua代码的主体部分放在LaTeX的外部,这样可以完全按照以往的编程习惯去编写。我以前所在的公司,曾经在机器人运动控制系统中使用过Lua,但因为我没有负责那一部分,所以只是知道有Lua这么...
  • 调用外部程序

    2011-06-23 10:24:00
    今天在工作中,需要在C++程序调用其它的可执行程序,在网上搜罗了一些,感觉很零碎,现整理如下,希望能对一些人有所帮助:C语言:1._execl函数家庭。Each function in this family loads and executes a new ...
  • C语言外部调用结构体,变量和数组

    万次阅读 2018-03-18 10:45:56
    程序设计中遇到的问题:结构体与外部调用变量和数组。【结构体定义与声明】将结构体写在子文件time.c里,并且在time.h声明外部调用,结果如图,只能在time.c文件中使用,不能实现结构体外部调用。 将结构体的声明和...
  • 计算两个大数的和(超过32位)C语言调用汇编函数,汇编函数实现加法功能,计算结果在控制台显示一、问题分析二、编写代码2.1 C语言代码2.2 汇编语言代码三、ADS调试过程四、附录 一、问题分析 本程序通过在C语言中...
  • C/C++调用外部程序整理

    千次阅读 2012-03-10 01:40:48
    C/C++调用外部程序整理 2008年12月14日 星期日 23:41 今天在工作中,需要在C++程序中调用其它的可执行程序,在网上搜罗了一些,感觉很零碎,现整理如下,希望能对一些人有所帮助: C语言: 1._execl函数...
  • C语言外部函数

    2019-07-24 18:23:30
    在需要调用此函数的文件中,用extern对函数声明,表示该函数是在其他文件中定义的外部函数 实战演练:有一个字符串,内有若干个字符串,要求输入一个字符串,程序便将字符串该字符删去。要求用外部函数实现! #...
  • 有时,我们会发现有些功能通过PL/SQL完成会很麻烦,而通过C/C++语言编程则会容易很多。因此,oracle提供了在PL/SQL程序里直接调用外部函数(包括C函数或Java方法)的功能,从而扩展了P...
  • C语言程序应禁止缓冲,如果写的ARM程序准备用于这种途径,且需要实时被读取标准输出,那么一般该程序内需要禁用缓冲 int main() { setvbuf(stdout, (char *)NULL, _IONBF, 0); return 0; } 因为在控制台运行时...
  • 在for DOS的C语言中,有一个system()函数,其功能是执行命令行程序,在Windows程序设计中WinAPI也为我们提供了类似的函数,它们就是WinExec()和ShellExecute(),下面就来讨论一下这两个函数的用法。 1)WinExec...
  • C语言中有关外部函数调用的问题

    万次阅读 多人点赞 2016-06-16 21:44:57
    对于外部函数实体(处于调用函数所在源文件之外的其他源文件中的函数),是在链接过程中,才会被寻找和添加进程序,一旦没有找到函数实体,就会报错,无法成功链接。 而外部函数的声明(一般声明在头文件中)只是令...
  • C语言模块化程序设计

    千次阅读 2017-09-07 22:29:29
    C语言模块化程序设计 ... (2) 某模块提供给其它模块调用外部函数及数据需在.h中文件中冠以extern关键字声明;  (3) 模块内的函数和全局变量需在.c文件开头冠以static关键字声明;  (4) 永远
  • 可执行的独立程序如下,是用C语言实现的哲学家就餐问题 ``` #include #include #include #include #include #define N 3 #define LEFT i #define RIGHT (i+1)%N sem_t mutex[N]; int id[N]={0,1,2}; ...
  • 静态库是在编译时,将库编译成可执行程序,运行时不需要外部函数库。没有依赖性。 动态库是在运行时,将库加载到程序中,运行时需要外部函数库。有依赖性。 Window下的静态库和动态库是.lib和.dll文件 Linux下的静态...
  • C语言程序设计A课程辅导(6)---第6章: 函数主要内容:一、函数的定义二、函数的调用三、变量的作用域四、递归函数五、函数指针六、函数应用举例一、函数的定义函数定义格式[] () 有效范围:由所使用的保留字extern或...
  • 当我们需要使用外部的库(比如XML处理、正则等),除了编译的时候连接该哭外,也可以打开.so的库获取函数地址,传入参数,来调用外部库的函数。 后一种方式可以在程序中用一个统一的结构体来管理。 比如动态库a中...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 620
精华内容 248
关键字:

c语言调用外部程序

c语言 订阅