linux手册翻译——pthread_setname_np(3)

linux手册翻译——pthread_setname_np(3),第1张

pthread_setname_np, pthread_getname_np :设置/获取线程名称

编译和链接需要参数 : -pthread

默认情况下,所有使用 pthread_create() 创建的线程都继承程序名称。 pthread_setname_np() 函数可用于为线程设置唯一名称,这对于调试多线程应用程序非常有用。 线程名称是一个有意义的 C 语言字符串,包括终止空字节 ('\0')在内,其长度限制为 16 个字符。 thread 参数指定要更改名称的线程; name 指定新名称。

pthread_getname_np() 函数可用于获取线程的名称。 thread 参数指定线程。 缓冲区 name 用于存放返回的线程名称; len 指定缓冲区的可用字节数。 区长度至少应为 16 个字符。 输出缓冲区中返回的线程名称将以空 ('\0')终止。

成功时,这些函数返回 0; 出错时,它们返回一个非零错误号。

pthread_setname_np() 函数可能会失败并出现以下错误:

ERANGEname 指定的字符串长度超过了允许的限制。

pthread_setname_np() 函数可能会失败并出现以下错误:

ERANGE name 和 len 指定的缓冲区太小,无法容纳线程名称。

如果这些函数中的任何一个无法打开 /proc/self/task/[tid]/comm,则调用可能会失败并出现 open(2) 中描述的错误之一。(见NOTES)

从实现上讲,pthread_setname_np()将线程的名称写入到了/proc FS的comm文件:/proc/self/task/[tid]/comm.

pthread_getname_np()则是从相同的位置获取线程名

看起来你的代码没什么问题啊:

#include <iconv.h>

size_t iconv(iconv_t cd,

char **inbuf, size_t *inbytesleft,

char **outbuf, size_t *outbytesleft)

你看函数原型, outbuf是一个 char **类型

在函数手册中:

The iconv() function converts one multibyte character at a time, and for each character conversion it increments *inbuf and decrements

*inbytesleft by the number of converted input bytes, it increments *outbuf and decrements *outbytesleft by the number of converted

output bytes

也就是说,当你执行过iconv以后,*outbuf所指向的内存空间位置已经被改掉了, 所以你任何时候去读*outbuf, 都是读不到任何iconv后的数据的(都在*outbuf这个指针前面放着呢)。

所以你应该 预先备份outbuf的数据,

比如 char k[1000]char *outb = k执行完iconv(t,&inb,&inl,&outb,&outl)以后,你去读k数组就可以了。

1、基本思路:从第一个文本文件中用

fgets()

函数读出一行数据,对读出的每一行数据进行判断,如果需要在它的适当位置插入一行,把相应的新内容、以及该行的内容写到第二个文本文件中。如果不需要在该位置插入一行,那就直接将该行数据用

fprintf()

函数写入第二个文本文件中。

2、伪代码:

1.打开要修改的文件A,

2.创建一个临时文件B,

3.

while(没到达文件A末尾)

从A中读取一行,写到B中,然后写入要追加的内容,写入换行符

4.关闭文件A,关闭文件B,

5.删除文件A(用remove函数),重命名B为A(用rename函数)


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/6162216.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-03-16
下一篇2023-03-16

发表评论

登录后才能评论

评论列表(0条)

    保存