基于pthread_create,readlink,getpid等函数的学习与总结


Posted in Javascript onJuly 17, 2013

pthread_create是UNIX环境创建线程函数
  
  具体格式:
 

#include<pthread.h>
 

int pthread_create(pthread_t *restrict tidp,const pthread_attr_t *restrict attr,void*(*start_rtn)(void*),void *restrict arg);
 

返回值:若成功则返回0,否则返回出错编号
 

返回成功时,由tidp指向的内存单元被设置为新创建线程的线程ID。attr参数用于制定各种不同的线程属性。新创建的线程从start_rtn函数的地址开始运行,该函数只有一个无指针参数arg,如果需要向start_rtn函数传递的参数不止一个,那么需要把这些参数放到一个结构中,然后把这个结构的地址作为arg的参数传入。
 

linux下用C开发多线程程序,Linux系统下的多线程遵循POSIX线程接口,称为pthread。

  #include <pthread.h>
  int pthread_create(pthread_t *restrict tidp, const pthread_attr_t *restrict attr, void *(*start_rtn)(void), void *restrict arg);
  
  Returns: 0 if OK, error number on failure

由 restrict 修饰的指针是最初唯一对指针所指向的对象进行存取的方法,仅当第二个指针基于第一个时,才能对对象进行存取。对对象的存取都限定于基于由 restrict 修饰的指针表达式中。 由 restrict 修饰的指针主要用于函数形参,或指向由 malloc() 分配的内存空间。restrict 数据类型不改变程序的语义。 编译器能通过作出 restrict 修饰的指针是存取对象的唯一方法的假设,更好地优化某些类型的例程。
 

第一个参数为指向线程标识符的指针。
 

第二个参数用来设置线程属性。
 

第三个参数是线程运行函数的起始地址。
 

最后一个参数是运行函数的参数。
 

另外,在编译时注意加上-lpthread参数,以调用静态链接库。因为pthread并非Linux系统的默认库

  ===============================================================================linux关于readlink函数获取运行路径           
相关函数: stat, lstat, symlink
表头文件: #include <unistd.h>
定义函数:int  readlink(const  char *path,  char *buf, size_t  bufsiz);
函数说明:readlink()会将参数path的符号连接内容到参数buf所指的内存空间,返回的内容不是以NULL作字符串结尾,但会将字符串的字符数返回。若参数bufsiz小于符号连接的内容长度,过长的内容会被截断
  
返回值:
执行成功则传符号连接所指的文件路径字符串,失败返回-1, 错误代码存于errno
错误代码:
               EACCESS                  取文件时被拒绝,权限不够
               EINVAL                    参数bufsiz为负数
               EIO                         O存取错误
               ELOOP                     欲打开的文件有过多符号连接问题
               ENAMETOOLONG       参数path的路径名称太长
               ENOENT                   参数path所指定的文件不存在
               ENOMEM                   核心内存不足
               ENOTDIR                   参数path路径中的目录存在但却非真正的目录
例一:
#include <stdio.h>
#include <unistd.h>
#define PATH_MAX 1024
char * get_exe_path()
{
    static char buf[PATH_MAX];
    int i;
    int rslt = readlink("/proc/self/exe", buf, PATH_MAX);
    if (rslt < 0 || rslt >= PATH_MAX)
    {
        return NULL;
    }
    buf[rslt] = '/0';
    for (i = rslt; i >= 0; i--)
    {
        printf("buf[%d] %c/n", i, buf);
        if (buf == '/')
        {
            buf[i + 1] = '/0';
            break;
        }
    }
    return buf;
}
int main(int argc, char ** argv)
{
    printf("%s/n", get_exe_path());
    return 0;
}

  ===============================================================================

  getpid 取得进程识别码
  
  相关函数: fork,kill,getpid

表头文件: #include<unistd.h>

  定义函数: pid_t getpid(void);

  函数说明:

  getpid()用来取得目前进程的进程识别码,许多程序利用取到的

此值来建立临时文件,以避免临时文件相同带来的问题。

  返回值: 目前进程的进程识别码

  范例:  
  #include<unistd.h>

  main()

  {

  printf(“pid=%d/n”,getpid());

  }

  执行:

  pid=1494 /*每次执行结果都不一定相同*/

  ===============================================================================
  
 
strrchr()函数
  
  定义和用法           
  strrchr()函数的作用是:查找一个字符串在另一个字符串中末次出现的位置,并返回从字符串中的这个位置起, 一直到字符串结束的所有字符。

如果未能找到指定字符,那么函数将返回NULL。

  语法
  char *strrchr(char *str, char c);

  例子
  #include <string.h>

  #include <stdio.h>

  int main(void)

 

char string[16];
 

char *ptr, c = 'r';

 

strcpy(string, "This is a string");
 

ptr = strrchr(string, c);

 

if (ptr)
 

         printf("The character %c is at position: %d/n", c, ptr-string);
 

else
 

         printf("The character was not found/n");
 

return 0;

  }

  运行结果是:The character r is at position:12

  ===============================================================================

  strstr()函数用法
  
c++函数原型:
const char * strstr ( const char * str1, const char * str2 );
char * strstr ( char * str1, const char * str2 );

C函数原型:
char * strstr ( const char *, const char * );
a字符串里 查看是否有b字符串,
有则 从首次发现b字符串处 返回 a字符串。
没有则输出 null
例子:
char st[]="abc 1234 xyz";
printf("%s",strstr(st,"34") );

打印出:
34 xyz

Javascript 相关文章推荐
JavaScript 全角转半角部分
Oct 28 Javascript
对frameset、frame、iframe的js操作示例代码
Aug 16 Javascript
jquery插件hiAlert实现网页对话框美化
May 03 Javascript
使用Node.js实现HTTP 206内容分片的教程
Jun 23 Javascript
JavaScript实现选择框按比例拖拉缩放的方法
Aug 04 Javascript
jQuery实现元素拖拽并cookie保存顺序的方法
Feb 20 Javascript
jquery实现垂直和水平菜单导航栏
Aug 27 Javascript
jQuery插件HighCharts绘制2D带有Legend的饼图效果示例【附demo源码下载】
Mar 10 Javascript
vue跨域解决方法
Oct 15 Javascript
简单实现vue中的依赖收集与响应的方法
Feb 18 Javascript
vue+element tabs选项卡分页效果
Jun 29 Javascript
使用vant的地域控件追加全部选项
Nov 03 Javascript
jcrop基本参数一览
Jul 16 #Javascript
jQuery实现鼠标滑过遮罩并高亮显示效果
Jul 16 #Javascript
jquery特效 幻灯片效果示例代码
Jul 16 #Javascript
jQuery .attr()和.removeAttr()方法操作元素属性示例
Jul 16 #Javascript
js判断屏幕分辨率的代码
Jul 16 #Javascript
js 调用父窗口的具体实现代码
Jul 15 #Javascript
JavaScript实现点击按钮后变灰避免多次重复提交
Jul 15 #Javascript
You might like
不用数据库的多用户文件自由上传投票系统(2)
2006/10/09 PHP
php执行sql语句的写法
2009/03/10 PHP
coreseek 搜索英文的问题详解
2013/06/08 PHP
如何让CI框架支持service层
2014/10/29 PHP
PHP数组相关函数汇总
2015/03/24 PHP
通过AJAX的JS、JQuery两种方式解析XML示例介绍
2013/09/23 Javascript
JavaScrip实现PHP print_r的数功能(三种方法)
2013/11/12 Javascript
浅析document.ready和window.onload的区别讲解
2013/12/18 Javascript
浅析jQuery(function(){})与(function(){})(jQuery)之间的区别
2014/01/09 Javascript
jquery判断小数点两位和自动删除小数两位后的数字
2014/03/19 Javascript
js统计录入文本框中字符的个数并加以限制不超过多少
2014/05/23 Javascript
Internet Explorer 11 浏览器介绍:别叫我IE
2014/09/28 Javascript
jquery实现两个图片渐变切换效果的方法
2015/06/25 Javascript
jQuery实现大转盘抽奖活动仿QQ音乐代码分享
2015/08/21 Javascript
JS中微信小程序自定义底部弹出框
2016/12/22 Javascript
BootStrap3中模态对话框的使用
2017/01/06 Javascript
@ResponseBody 和 @RequestBody 注解的区别
2017/03/08 Javascript
vue 实现数字滚动增加效果的实例代码
2018/07/06 Javascript
js实现一个简易计算器
2020/03/30 Javascript
node省市区三级数据性能测评实例分析
2019/11/06 Javascript
es6函数之rest参数用法实例分析
2020/04/18 Javascript
[56:45]DOTA2上海特级锦标赛D组小组赛#1 EG VS COL第一局
2016/02/28 DOTA
[01:01:04]2018DOTA2亚洲邀请赛 4.5 淘汰赛 OpTic vs TNC 第一场
2018/04/06 DOTA
[31:55]完美世界DOTA2联赛循环赛 IO vs GXR BO2第一场 11.04
2020/11/05 DOTA
Python的另外几种语言实现
2015/01/29 Python
Python设计足球联赛赛程表程序的思路与简单实现示例
2016/06/28 Python
python安装PIL模块时Unable to find vcvarsall.bat错误的解决方法
2016/09/19 Python
Windows下python3.7安装教程
2018/07/31 Python
Python with语句用法原理详解
2020/07/03 Python
有关pycharm登录github时有的时候会报错connection reset的问题
2020/09/15 Python
台湾家适得:Homeget
2019/02/11 全球购物
会计电算化学生个人的自我评价
2014/02/08 职场文书
中秋手机店促销方案
2014/06/16 职场文书
个人批评与自我批评
2014/10/15 职场文书
Keras在mnist上的CNN实践,并且自定义loss函数曲线图操作
2021/05/25 Python
JS前端canvas交互实现拖拽旋转及缩放示例
2022/08/05 Javascript