对于linux exec函数数族的疑问!!!

当前位置:&&
求助!关于多线程下数据库操作的问题,请大家帮忙看看
&&&&来源:&互联网& 发布时间:
&&&&数据库&:&数据库(11张) 数据库,简单来说是本身可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据进行新增、截取、更新、删除等操作。数据库指的是以一定方式储存在一起、能为多个用户共享、具有尽可能小的冗余度的特点、是与应用程序彼此独立的数据集合。在经济管理的日。&&&&EXEC&:&exec函数族,顾名思义,就是一簇函数,他把当前进程映像替换成新的程序文件,而且该程序通常main函数开始执行。&&&&数据&:&数据就是数值,也就是我们通过观察、实验或计算得出的结果。数据有很多种,最简单的就是数字。数据也可以是文字、图像、声音等。数据可以用于科学研究、设计、查证等。&&&&SQL&:&结构化查询语言SQL(STRUCTURED QUERY LANGUAGE)是最重要的关系数据库操作语言,并且它的影响已经超出数据库领域,得到其他领域的重视和采用,如人工智能领域的数据检索,第四代软件开发工具中嵌入SQL的语言等。SQL 是1986年10 月由美国国家标准局(ANSI)通过的数据库语言美国标准,接着,国际标准。&&&&char&:&char是C/C++整型数据中比较古怪的一个,其它的如int/long/short等不指定signed/unsigned时都默认是signed,但char在标准中是unsigned,编译器可以实现为带符号的,也可以实现为不带符号的,有些编译器如pSOS的编译器,还可以通过编译开关来指定它是有符号数还是无符号数。
我在main函数里用以下方法连接数据库:
void connect_db(void)
EXEC SQL BEGIN DECLARE SECTION;
username[30];
password[30];
serverName[30];
DBName[20];
EXEC SQL END DECLARE SECTION;
EXEC SQL WHENEVER SQLERROR CALL error_handler();
EXEC SQL WHENEVER SQLWARNING CALL warning_handler();
EXEC SQL WHENEVER NOT FOUND CALL notfound_handler();
EXEC SQL CONNECT :username IDENTIFIED BY :password USING :serverN
EXEC SQL USE :DBN
在主程序里对数据库的访问是成功的,但是在线程中却返回数据库没有连接成功。
于是我在每个线程开始时再去连接数据库,一开始的操作都是对的。由于我在每个线程里的操作都是对同一个数据库的同一个表的不同行进行读写操作,当其中一个线程的操作完成,线程结束时,整个表好像都被锁住了,不仅其他线程的操作被堵住,我直接在控制台登陆数据库,登陆成功,但对这张表也不能进行任何操作,请问这是什么原因造成的?请高手指点。
1、proc threads=yes ....
2、EXEC SQL ENABLE THREADS;
EXEC SQL CONTEXT ALLOCATE :
EXEC SQL CONTEXT USE :
EXEC SQL CONTEXT FREE :
什么数据库?
你设置的是什么锁?行锁?页锁??
本页相关标签:
相关技术文章: &&&&
比如有个压缩文件:abcd.tar,我在当前目录用 tar -xvf abcd.tar时,系统好像一直在解压,我都看到了解压出来了正确文件,比如tool/……/ab.exe,可是,后面还跟着系统提示:
cannot open: No such file or directory
而且看这个目录里面,也一直只有这个压缩文件,没有解压出的任何东东,这就奇怪了,我究竟错在哪里了? 该怎么解决这个问题呢?
PS:我在别的机器上正确解压过这个文件,因此这个压缩文件肯定是对的~
md5 /mnt/usb/abcd.tar & MD5SUM
md5 /home/abcd.tar & MD5SUM
然后比较两个校验串是不是一样。
...... &&&&
请问linux 下怎么屏root用户的NETMER,和FTP登陆,
请高人指点谢谢
有的系统是在/etc/default/login下有设置,具体设置项要看文件内容了。
不知道你的系统怎样
...... &&&&
??我没有设置代理服务器;
必须设置代理服务器么?
......&nbsp最新技术文章: &&&&
在使用小红帽linux9时,进行系统设置时,比如更改屏幕分辨率时,会有一个双钥匙出现,点击之有一个英文的是示,好像是关于授权方面的,本人英文不好,不明白什么意思,哪位大侠能帮助解决啊!!!!!!
是的,只要这个keep auth的东西没有关掉或者超时,你下次执行需要root权限
的一些程序就可以不用输入root密码了。
每次输入root密码后,系统会自动保留root的使用权限一定的时间。
你可以让它保留,或是让它忘记密码。
是有这么个玩...... &&&&
根据网上的文章来生成一个makefile
在自己的目录下建立devel\hello
然后用vi写了个超简单的hello.c
在shell下键入autoscan后报错
说是configure.ac:没有这个文件或目录
还有一个是~~~~~~~,exit 1
但不管怎么样还是在hello下生成了log和configure.scan
怎么回事错在哪里啊
改成configure.in后执行aclocal后没有生成aclocal.m4,倒是有个 autom4te.cache
到次,晕了,大家帮帮帮帮忙了
这不是一个简单的问题,要熟悉Linux下程序编译的一系列问题,包括需要哪些文件,哪些文件需要放在哪些目录下等等,很繁琐。
...... &&&&
本人现在需要做Linux下的入侵检测系统,基础部分就是网络数据包的提取。前一段时间在网上下载了libpcap库,看了源代码,好多--没办法全部理解。现在的设想是借鉴libpcap库,自己做一个跟libpcap差不多的,功能不需要那么全,只要能提取出数据包来就行,哪位高手指点指点。
--或者给一下Linux下抓包功能的最基本实现(不要基于libpcap库的,只用Linux自带的库函数)
--推荐几本书或网上的资料也可以。
---先谢过各位了!
其实也没那么复杂啦,关键是你要用tcpdump之类的程序跑起来,然后动态的跟踪一下,看看一个数据......&nbsp
特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!
(C)2012-,站长邮箱:www_169it_(请将#改为@)基于exec函数族分析Linux初始化进程运行环境的过程 - 下载频道
- CSDN.NET
&&&&基于exec函数族分析Linux初始化进程运行环境的过程
基于exec函数族分析Linux初始化进程运行环境的过程
本文结合Understanding Linux Kernel英文版第三版以及Linux2.6.11源代码详细分析了Linux exec函数族调用时内核对于进程切换所完成的一系列关于进程运行环境的初始化的过程。
若举报审核通过,可奖励20下载分
被举报人:
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
您可能还需要
操作系统下载排行C语言 进程 子进程 问题_百度知道
C语言 进程 子进程 问题
如果我的代码A.c想调用另一个代码B.c,两个代码都有自己的主函数。我把B编译成可成型程序B。在A中int main(){
……char *char *//可以使用(1、system(B))(2、fork()exec(B))(3)spawn(B)这里参数又省略。B执行时参数会有两个字符串,p、q。并在程序中修改其值。这里如果B就是个普通函数,不是主函数。那么我调用B(^,x,y)即可。但是现在B是一个可执行程序了,该怎么传递这两个参数(貌似main函数的参数,都是字符串常量吧?不是指针,可是我希望传递这样的指针变量),并修改后返回A呢?谢谢了……}
我有更好的答案
用exec函数族是可以给另一个程序传参的。其实进程间的通讯可以用管道啊。
B.exe接收参数吗? 比如:system(b.exe p q)仔细看了看,还是得看你的B程序是怎么处理的,可以传指针,也能返回值。
其他类似问题
为您推荐:
c语言的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁  疑惑:既然所有新进程都是由fork产生的,而且由fork产生的子进程和父进程几乎完全一样,那岂不是意味着系统中所有的进程都应该一模一样了吗?而且,就我们的常识来说,当我们执行一个程序的时候,新产生的进程的内容应就是程序的内容才对。是我们理解错了吗?显然不是,要解决这些疑惑,就必须提到我们下面要介绍的exec系统调用。  1.10.1 简介  说是exec系统调用,实际上在Linux中,并不存在一个exec()的函数形式,exec指的是一组函数,一共有6个,分别是:  #include  int execl(const char *path, const char *arg, ...);  int execlp(const char *file, const char *arg, ...);  int execle(const char *path, const char *arg, ..., char *const envp[]);  int execv(const char *path, char *const argv[]);  int execvp(const char *file, char *const argv[]);  int execve(const char *path, char *const argv[], char *const envp[]);  其中只有execve 是真正意义上的系统调用,其它都是在此基础上经过包装的库函数。  exec函数族的作用是根据指定的文件名找到可执行文件,并用它来取代调用进程的内容,换句话说,就是在调用进程内部执行一个可执行文件 。这里的可执行文件既可以是二进制文件,也可以是任何Linux下可执行的脚本文件。  与一般情况不同,exec函数族的函数执行成功后不会返回,因为调用进程的实体,包括代码段,数据段和堆栈等都已经被新的内容取代,只留下进程ID等一些表面上的信息仍保持原样,颇有些神似"三十六计"中的"金蝉脱壳"。看上去还是旧的躯壳,却已经注入了新的灵魂。只有调用失败了,它们才会返回一个-1,从原程序的调用点接着往下执行。  现在我们应该明白了,Linux下是如何执行新程序的,每当有进程认为自己不能为系统和拥护做出任何贡献了,他就可以发挥最后一点余热,调用任何一个exec,让自己以新的面貌重生;或者,更普遍的情况是,如果一个进程想执行另一个程序,它就可以fork出一个新进程,然后调用任何一个exec,这样看起来就好像通过执行应用程序而产生了一个新进程一样。  事实上第二种情况被应用得如此普遍,以至于Linux专门为其作了优化,我们已经知道,fork会将调用进程的所有内容原封不动的拷贝到新产生的子  进程中去,这些拷贝的动作很消耗时间,而如果fork完之后我们马上就调用exec,这些辛辛苦苦拷贝来的东西又会被立刻抹掉,这看起来非常不划算,于是人们设计了一种"写时拷贝(copy-on-write)"技术,使得fork结束后并不立刻复制父进程的内容,而是到了真正实用的时候才复制,这样如果下一条语句是exec,它就不会白白作无用功了,也就提高了效率。  1.10.2 稍稍深入  上面6条函数看起来似乎很复杂,但实际上无论是作用还是用法都非常相似,只有很微小的差别。在学习它们之前,先来了解一下我们习以为常的main函数。  下面这个main函数的形式可能有些出乎我们的意料:  int main(int argc, char *argv[], char *envp[])  它可能与绝大多数教科书上描述的都不一样,但实际上,这才是main函数真正完整的形式。  参数argc指出了运行该程序时命令行参数的个数,数组argv存放了所有的命令行参数,数组envp存放了所有的环境变量。环境变量指的是一组  值,从用户登录后就一直存在,很多应用程序需要依靠它来确定系统的一些细节,我们最常见的环境变量是PATH,它指出了应到哪里去搜索应用程序,如  /bin;HOME也是比较常见的环境变量,它指出了我们在系统中的个人目录。环境变量一般以字符串"XXX=xxx"的形式存在,XXX表示变量名,  xxx表示变量的值。  值得一提的是,argv数组和envp数组存放的都是指向字符串的指针,这两个数组都以一个NULL元素表示数组的结尾。  我们可以通过以下这个程序来观看传到argc、argv和envp里的都是什么东西:  /* main.c */  int main(int argc, char *argv[], char *envp[])  {  printf("n### ARGC ###n%dn", argc);  printf("n### ARGV ###n");  while(*argv)  printf("%sn", *(argv++));  printf("n### ENVP ###n");  while(*envp)  printf("%sn", *(envp++));  return 0;  }  编译它:  $ cc main.c -o main  运行时,我们故意加几个没有任何作用的命令行参数:  $ ./main -xx 000  ### ARGC ###  3  ### ARGV ###  ./main  -xx  000
相关热词搜索:
相关图片、问答及文章:
网络知识网频道导航
unix/linux栏目导航
Powered by
西西文化传播有限公司 & 2012  exec提供了一种在进程中启动另外一个程序的执行的方法。它可以根据指定的文件名或目录名找到可执行文件,并用它来取代原调用进程的数据段、代码段和堆栈段。在执行完之后,原调用进程的内容除了进程号外,其他全部都被替换了。
1.可执行文件查找方式exec族中的函数以p结尾的函数可以只给出文件名,系统会自动从环境变量&$PATH&所包含的路径中进行查找。即 结尾不是p的,必须要给出文件的路径,并且最后的参数为NULL;
2.参数表传递方式两种方式:逐个列举或是将所有参数通过指针数组传递。以函数名的第五位字母来区分,字母为&l&(list)的表示逐个列举的方式;字母&v&(vertor)的表示将所有参数构造成指针数组传递;
3.环境变量的使用exec函数族可以默认使用系统的环境变量,也可以传入指定的环境变量。这里,以&e&(Environment)结尾的两个函数可以 envp[]中传递当前进程所使用的环境变量。
exec(1,2,3....,最后个参数)exec族中,第一个参数为要执行程序的路径。&&&&&&&&& 第二个参数为要执行的程序名称。&&&& 第三个参数为给要执行程序传递参数。&&&& 最后一个参数为NULL;
例子:int main (){if(-1 == execle("./exec2","exec2","1.txt",NULL)){perror("");exit(0);}}//打开exec2可执行文件,并将"1.txt"传递给exec2中的main函数中的参数中
&exit()调用退出处理函数,清理缓存区,调用exit系统调用,进程结束。_exit()不清理缓存区。
利用exec实现shell的模仿 :
#include &stdio.h&#include &sys/wait.h&#include &sys/stat.h&#include &stdlib.h&#include &errno.h&#include &string.h&#include &unistd.h&
#define N 64
int main(){&&& pid_&&& char buf[N];&&& char *arg[N];&&& int i = 0;
&&& printf("&");&&& while (fgets(buf, N, stdin) != NULL)&&& {&&&&&&& buf[strlen(buf)-1] = 0;&&&&&&& if ((pid = fork()) == -1)&&&&&&& {&&&&&&&&&&& perror("fork");&&&&&&&&&&& exit(-1);&&&&&&& }&&&&&&& if (pid == 0)&&&&&&& {&&&&&&&&&&& arg[i++] = strtok(buf, " ");&&&&&&&&&&& do&&&&&&&&&&& {&&&&&&&&&&&&&&& arg[i++] = strtok(NULL, " ");&&&&&&&&&&& }while(arg[i-1] != NULL);
&&&&&&&&&&& if (execvp(arg[0], arg) != -1)&&&&&&&&&&& {&&&&&&&&&&&&&&& perror("execvp");&&&&&&&&&&&&&&& exit(0);&&&&&&&&&&& }&&&&&&& }&&&&&&& else&&&&&&& {&&&&&&&&&&& wait(NULL);&&&&&&&&&&& printf("&");&&&&&&& }&&& }
&&& exit(0);}
阅读(...) 评论()}

我要回帖

更多关于 exec函数 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信