导航:首页 > 编程系统 > linuxc创建子线程

linuxc创建子线程

发布时间:2023-08-04 17:59:25

1. linux中C语言关于进程的创建

/*请解释一下*/
while(((child=wait(&status))==-1)&(errno==EINTR));

这种的目的是父亲进程等待子进程结束,回并回收子进程的资源,将子进程的退出状态存答储在status中,同时,返回该子进程的pid。
如果wait函数返回-1表示wait函数被其它情况打断返回,并没有等待到子进程结束,而同时判断errno的值是不是EINTR(意思是让你try again),那么,让进程继续等待。因为这个错误并不是真正wait错误,而是被timeout时间等造成的,因此重新等待。而如果是其它情况,显然是wait函数调用错误,即下面的if(child==-1),需要打印错误信息。‘

//但你这句应该写错了。应该是逻辑与而不是位与操作。即
while(((child=wait(&status))==-1)&&(errno==EINTR));
/*请解释一下*/
if(child==-1)

你对信号处理部分还需要努力。
另外介绍一本书《Linux高级程序设计 第3版》 上面讲得很清楚。
有问题我们继续交流,一起学习。

更多技术文章可以关注我的微博,名字:成都睿尔科技 。

2. linux 驱动中,如何建立一个普通线程

gcc xxx.c -lpthread 其中的-l是指抄包含的lib库,具体写法可以man gcc看下 多线程函数除了要包含头文件pthread.h外还必须要包含lib库pthread pthread_create是创建线程,但具体的线程里面做什么事是在void *create(void *arg)里,这个函数名是自...

3. linux c 编程:创建一个线程,监视某个目录,一旦目录里出现新的文件,就将文件转移到指定的目录里去。

/*
头文件
*/
#define SRCPATH "srcpath/"
#define DSTPATH "dstpath/"

int movefile()
{
DIR *dir;
struct dirent *dt;
FILE *fp1,*fp2;
char filename1[256],filename2[256];
char buf[1024];
int readsize,writesize;

if((dir = opendir(SRCPATH)) == NULL)
{
printf("opendir %s error\n",SRCPATH);
return -1;
}
memset(filename1,0,sizeof(filename1));
strcpy(filename1,SRCPATH);
memset(filename2,0,sizeof(filename2));
strcpy(filename2,DSTPATH);
while(1)
{
while((dt = readdir(dir)) != NULL)
{
if(strcmp(dt->d_name,".")==0||strcmp(dt->d_name,"..")==0)
{
continue;
}
//如果这个目录里 还有目录,可以在这加判断
//这里假设初始为空目录
strcat(filename1,dt->d_name);
strcat(filename2,dt->d_name);
//如果进程资源较少可以直接用linux系统命令

fp1 = fopen(filename1,"rb");
if(fp1==NULL)
{
printf("open %s failed /n",filename1);
return -1;
}

fp2 = fopen(filename2,"wb");
if(fp2==NULL)
{
printf("open %s failed /n",filename2);
fclose(fp1);
return -1;
}

while((readsize = fread(buf,sizeof(buf),1,fp1))>0)
{
//total += readsize;
memset(buf,0,sizeof(buf));
writesize = fwrite(buf,sizeof(buf),1,fp2);
if(writesize!==readsize)
{
printf("write error");
return -2;
fclose(fp1);
fclose(fp2);
}
}
fclose(fp1);
fclose(fp2);
rmdir(filename2);
}
}
}

int main(int argc,char **argv)
{
pthread_t id1;
int ret;
ret = pthread_create(&id1, NULL, (void*)movefile, NULL);
return ret;
}
自己调试下

4. linux 线程里面创建线程吗

1、windows里的进程/线程是继承自OS/2的。在windows里,"进程"是指一个程序,而"线程"是一个"进程"里的一个执行"线索"。从核心上讲,windows的多进程与Linux并无多大的区别,在windows里的线程才相当于Linux的进程,是一个实际正在执行的代码。但是,windows里同一个进程里各个线程之间是共享数据段的。这才是与Linux的进程最大的不同。2、在windows下,使用CreateThread函数创建线程,与Linux下创建进程同,windows线程不是从创建处开始运行的,而是由CreateThread指定一个函数,线程就从那个函数处开始运行。此程序同前面的UNIX程序一样,由两个线程各打印1000条信息。threadID是子线程的线程号,另外,全局变量g是子线程与父线程共享的,这就是与Linux最大的不同之处。大家可以看出,windows的进程/线程要比Linux复杂,在Linux要实现类似windows的线程并不难,只要fork以后,让子进程调用ThreadProc函数,并且为全局变量开设共享数据区就行了,但在windows下就无法实现类似fork的功能了。所以现在windows下的C语言编译器所提供的库函数虽然已经能兼容大多数Linux/UNIX的库函数,但却仍无法实现fork。3、对于多任务系统,共享数据区是必要的,但也是一个容易引起混乱的问题,windows下,一个程序员很容易忘记线程之间的数据是共享的这一情况,一个线程修改过一个变量后,另一个线程却又修改了它,结果引起程序出问题。但在Linux下,由于变量本来并不共享,而由程序员来显式地指定要共享的数据,使程序变得更清晰与安全。

5. linux 编写一个多线程程序,要求主线程创建3个子线程,3个子线程在执行时都修改一个他们的共享变量。

void func1(int n)
{
printf("%d",n*10);
}
void func1(int n)
{
printf("%d",n-10);
}

void func1(int n)
{
printf("%d",n/2);
}

int main(void)
{
int n = 10;
pthread_t 1_thread,2_thread,3_thread;
pthread_create(1_thread,NULL,func1,n);
pthread_create(2_thread,NULL,func2,n);
pthread_create(3_thread,NULL,func3,n);
return 0;
}

6. 在Linux下用C++创建新线程

#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
void* thread(void* arg)
{
printf ("The child process...\n");
}

int main(int argc, char *argv[])
{
pthread_t id;
int i,ret;
ret=pthread_create(&id,NULL,(void *)thread,NULL);
if(ret!=0)
{
printf ("Create pthread error!\n");
exit (1);
}

}
程序如上就可以编译。
它属于linux下C编程中多线程编程的范围。
用命令
gcc -lpthread 1.c -o 1
./1
就可以出结果。
多线程编程的基础可以参考
http://hi..com/huifeng00/blog/item/ed13ddc0d6c59c170ff47715.html

7. 怎么用C语言实现两个线程在Linux环境下打印

#include<stdio.h>
#include<pthread.h>

voidthread()
{
pthread_ttid=pthread_self();

while(1)
{
printf("pthread%u ",tid);
sleep(1);
}
}

intmain(intargc,char*argv[])
{
pthread_ttid=0;

if(0!=pthread_create(&tid,NULL,(void*)thread,NULL))
{
printf("createpthread%uerror ",tid);
return-1;
}

if(0!=pthread_create(&tid,NULL,(void*)thread,NULL))
{
printf("createpthread%uerror ",tid);
return-1;
}

while(1)
{
printf("main ");
sleep(1);
}

return0;
}

//编译记得内加容-lpthread

阅读全文

与linuxc创建子线程相关的资料

热点内容
谷居网到底是什么网站 浏览:836
资源数据到底有什么用 浏览:735
丝芙兰黑卡升级金卡 浏览:957
linux多线程写文件 浏览:463
荣耀手机如何隐藏app功能 浏览:479
股市资讯类app哪个好 浏览:750
猿编程ar编程怎么拍照 浏览:891
热重分析的数据有哪些 浏览:943
微信群主功能在哪 浏览:685
mac系统cad文件导出pdf格式软件 浏览:56
微信服务号无法认证 浏览:558
cad导入pdf文件是白底 浏览:427
苹果手机4怎么越狱教程 浏览:205
笔趣图里的下载文件在哪里 浏览:207
电商数据lm是什么意思 浏览:511
为什么cad只能从文件打开 浏览:376
电子磅超载数据上传哪里 浏览:509
数据分析行业有哪些公司 浏览:701
c怎么判读读取的文件格式是否是wav 浏览:195
javascript后一天 浏览:310

友情链接