文件IO相关的几个面试题

如下代码输出什么?

#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>

int main()

{

fprintf(stderr, "Hello ");

fprintf(stdout, "It's a small ");

fprintf(stderr, "World\n");

fprintf(stdout, "place\n");

return 0;

}

运行结果:

[root systemProgramming]#./printf

Hello World

It's a s......

线程池-C语言实现

最近可能会用到C实现的线程池,在github fork了一个项目,学习其代码,修改发现的问题,本文记录学习中遇到的问题和解决方法。

我的github仓库地址C-Thread-Poll

原作者仓库地址C-Thread-Poll

查看进程创建的线程

thpool.c文件函数thread_do函数使用了函数:

prctl(PR_SET_NAME, thread_name);

设置线程的名字,thread-pool-%d,如何查看某个进程所创建的线程呢?

[root pthread_detach]#ps -T -p $(pidof /root/C-Thread-Pool/exam......

Linux C写中文配置

需要在linux C/C++程序中生成一个文件,文件中包含中文字符,可是上库到代码中编译运行,发现生成的文件乱码,相同的代码,自己编写的demo生成的文件显示却正常。

为什么会出现相同代码,运行结果不同的问题呢?

原因是由于项目文件中使用的是ISO 8859-1编码,而我自己编写的demo使用的是utf-8编码,而ISO 8859-1编码无法识别中文字符,因此导致写入到文件乱码。

我们使用如下代码验证:

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <......

C语言常用宏总结

获取数组长度

/// Obtain the number of elements in the given C array

#define GET_ARRAY_LEN( arrayName ) (sizeof( arrayName ) / sizeof(( arrayName)[ 0 ] ))

使用例子:

#include <stdio.h>

/// Obtain the number of elements in the given C array

#define GET_ARRAY_LEN( arrayName ) (sizeof( arrayName ) / ......

void *的作用

在stackoverflow上看到一篇关于void *作用觉得非常不错,将作者的回答贴在下面,后续补充自己的理解。

A pointer to void is a "generic" pointer type. A void * can be converted to any other pointer type without an explicit cast. You cannot dereference a void * or do pointer arithmetic with it; you must convert it to a pointer to a......

C语言宏offsetof

C 库宏 offsetof(type, member-designator) 会生成一个类型为 size_t 的整型常量,它是一个结构成员相对于结构开头的字节偏移量。成员是由 member-designator 给定的,结构的名称是在 type 中给定的。

在阅读Linux/UNIX系统编程手册一书时阅读源代码时有如下相关注释:

/* REQ_MSG_SIZE computes size of 'mtext' part of 'requestMsg' structure.

We use offsetof() to handle the possibility that there ar......

C C++const与数组

在常讨论问题的qq group中看到大家对一个问题争论不一,本着学习的态度,编写demo,复习和学习相关知识,如有错误欢迎指正。

const例子一:#include <stdio.h>

int main()

{

/*这里加*表示数组parr内容不能修改即使用下面注释的语句赋值是非法的*/

char * const parr[] = {"abc","def"};

char *ptr = "Helloworld";

//parr[1] = ptr;

printf("parr[0] = %s\n",......

cJSON使用入门

本文例子及相关解释来自文章cJSON的使用方法,修复原文中的几个明显错误和内存泄露,因在项目中需要使用到cJSON,因此本文主要学习cJSON的相关使用,源码阅读与解析在后续文章中更新。

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写,同时也易于机器解析和生成。它基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScrip......

Where is PATH_MAX defined in linux

stackoverflow上看到一篇帖子Where is PATH_MAX defined in linux,根据自己的理解总结如下:

源代码path_max.c

#include <stdio.h>

#include <linux/limits.h>

int main()

{

printf("%d\n",PATH_MAX);

return 0;

}

使用gcc -E path_max.c -o path_max.i,查案path_max.i,如果源代码中包含头文件limits.h而不是linux/limits.h同样可以得到正确输出......

pthread_join和pthread_detach

关于pthread_join

函数原形:

#include <pthread.h>

int pthread_join(pthread_t thread,void **retval);

return 0 on success,or a positive error number on error

调用pthread_join的线程会阻塞,如果线程已经终止,pthread_join会立即返回。

如果线程简单的返回,那么rval_ptr被设置成线程的返回值;如果调用了pthread_exit,则可将一个无类型指针返回,在pthread_join中对其进行访问;如果线程被......