`
ouyida3
  • 浏览: 50091 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

fprintf函数导致进程挂死问题分析

    博客分类:
  • c++
 
阅读更多
今天tuxedo的某个服务一调用就挂死,不报错,没coredump,经过打日志定位,有问题的代码是这一行:
fprintf(m_fp,"%s%s",strTime.c_str(),strFmt.c_str());

m_fp是File*,后面两个变量都是string,并且都能打印出来,没有问题。

DaYong一口咬定就是fopen的问题。于是查看fopen的代码:
m_fp = fopen(m_strDirAndName.c_str(), "a+");

但是DaYong说不出fopen是什么问题。
于是把文件名打印出来一看,恍然大悟,fopen这个函数,会自动创建文件,但是不会自动创建路径

ps:没core是因为把core文件关了不生成。fopen这个函数一般而言要要做成功失败判断的,代码里没判断成功就直接fprintf不健壮。

参考文档:
http://www.cplusplus.com/reference/cstdio/fprintf/?kw=fprintf

示例代码:
int main()
{
FILE * pFile;
int n;
char name[100];

pFile = fopen("myfile.txt", "a+");
for (n = 0; n < 3; n++)
{
puts("please, enter a name: ");
gets(name);
fprintf(pFile, "Name %d [%-10.10s]\n", n, name);
}
fclose(pFile);

return 0;
}
分享到:
评论

相关推荐

    进程的管道通信实验 操作系统 课程设计

    2. **数据传输**:写端进程使用`write()`或`fprintf()`等函数将数据写入管道,而读端进程使用`read()`或`fgets()`等函数读取数据。需要注意的是,管道中的数据是先进先出(FIFO)的,一旦管道被填满,写操作会阻塞,...

    linux c函数详细讲解

    每个函数都有其特定的使用场景和注意事项,例如,不当的内存管理可能导致内存泄漏,不正确的文件操作可能损坏文件系统,忽视错误处理可能导致程序异常退出。学习和熟练掌握这些函数,是成为一名合格的Linux C程序员...

    监控进程程序

    在IT行业中,监控进程是系统管理的一个重要环节,它能够确保关键服务的稳定运行,防止因为某个进程意外终止导致整个系统的瘫痪。本项目名为"监控进程程序",其核心功能在于检测特定进程的状态,一旦该进程结束,程序...

    linux进程间通信管道

    在Linux操作系统中,进程间通信(IPC,Inter-Process Communication)是多个进程之间共享数据、协同工作的关键机制。管道(Pipe)是最早实现的、也是最简单的IPC形式之一,它允许一个进程(生产者)向另一个进程...

    linux进程编程介绍.rar

    2. 线程安全函数:如线程安全的printf()替代品(如fprintf(stderr, ...)),避免标准I/O的竞态条件。 3. 临界区:通过互斥锁等手段确保同一时间只有一个线程执行特定代码段。 以上内容仅是Linux进程编程的冰山一角...

    常用linux系统调用函数集合

    注意安全问题,`strncpy()`和`strcpy()`可能会导致缓冲区溢出,建议使用`strlcpy()`和`strlcat()`安全版本。 4. **文件I/O**:`open()`, `read()`, `write()`, `close()`是基本的文件操作函数,用于打开、读取、...

    C语言函数库详解

    1. 输入/输出(IO)函数:`printf`、`scanf` 和 `fprintf` 是最常用的IO函数,用于在控制台上打印信息和从键盘读取输入。`fopen` 和 `fclose` 分别用于打开和关闭文件,而 `fgets` 和 `fputs` 用于读写文件内容。 2...

    多进程服务器的Word文档

    - **案例分析**:例如,如果有一个程序需要打开一个文件并写入数据,当这个任务被多个进程同时执行时,如果没有适当的同步机制来确保文件访问的顺序性,就可能导致数据混乱或者文件损坏。 #### 进程ID - **作用**...

    Linux 守护进程

    4. **改变工作目录**:将工作目录更改为根目录或某个永久存在的目录,防止因原始工作目录被卸载而导致守护进程出现错误。 ```c chdir("/"); ``` 5. **重设文件权限掩码**:设置文件权限掩码为默认值,确保守护...

    Linux下C语言中的多进程编程资料

    `fork()`函数会创建一个与父进程几乎完全相同的进程,这个新进程称为子进程。子进程继承了父进程的大部分属性,但拥有自己独立的地址空间和进程ID(PID)。 ##### 代码示例: ```c #include #include #include ...

    Linux常用C函数速查(中文版).rar

    非线程安全的函数在同一时刻由多个线程调用可能会导致数据竞争或死锁等问题。 9. **内存管理** C语言中,程序员需要自行管理内存,`malloc`、`calloc`、`realloc`和`free`等函数用于动态分配和释放内存,避免内存...

    linux c函数参考

    - `realloc`:调整已分配内存的大小,避免了重新分配可能导致的数据丢失。 3. 字符串处理: - `strcpy` 和 `strncpy`:复制字符串,后者可以限制复制的字符数。 - `strlen`:计算字符串长度。 - `strcmp` 和 `...

    linux的c函数经典收藏

    但`gets()`因安全问题(可能导致缓冲区溢出)已被弃用,建议使用`fgets()`替代。 2. **内存管理函数**: - `malloc()` 和 `free()`: 分配和释放动态内存,`malloc()`根据需要分配指定大小的内存块,`free()`则用于...

    linux popen函数

    在Linux系统中,`popen`函数是一个非常实用的C语言标准库函数,它允许程序以进程间通信(IPC,Inter-Process Communication)的方式与另一个命令或者程序进行交互。`popen`函数在`stdio.h`头文件中定义,它的主要...

    pb大于32765大小的文件读写函数

    4. **写入文件**:与读取类似,使用`fwrite`或`fprintf`将内存中的数据写入文件,大文件可能需要多次写入。 5. **文件定位**:`fseek`函数用于在文件中移动读写位置,对于大文件,可能需要精确控制以便于处理特定...

    Linux C 常用库函数手册(最新整理)

    通过这份Linux C常用库函数手册,开发者可以快速找到并理解各种函数的用法,提高代码编写效率,避免因不熟悉库函数而导致的错误。同时,手册中的示例和解释可以帮助初学者更好地理解和应用这些函数,提升编程技能。...

    武大UNIX环境高级编程2019年考试题目(考后回忆版).doc

    `scanf()`和`printf()`等函数可以用来从标准输入读取整数,`fscanf()`和`fprintf()`则可以操作缓冲区。 **编程题相关知识点** 1. **排序与查找**:题目要求对大量数据进行排序并找到最大值和最小值,这可能涉及到...

    APUE读书笔记《UNIX环境高级编程第二版》

    - `pause()`挂起进程直到收到信号。 **10. 信号集及其处理函数** - 使用`sigprocmask()`、`sigsuspend()`管理信号屏蔽。 **11. sigaction函数** - `sigaction()`更灵活地设置信号处理函数。 **12. sigsetjmp和...

    在不具备gdb环境的Linux系统上大致定位段错误位置

    当出现段错误时,Linux系统会向进程发送`SIGSEGV`信号,如果该信号没有被正确处理,则会导致进程终止,并显示“segmentation fault”错误消息。 #### 2. SIGSEGV信号处理函数 默认情况下,当程序接收到`SIGSEGV`...

    Linux系统下计算机C语言的编程技巧分析 (1).pdf

    Linux系统遵循POSIX标准,使用`fopen()`, `fprintf()`, `fclose()`等函数进行文件操作。同时,可以利用`open()`, `read()`, `write()`, 和`close()`系统调用进行低级文件操作。 2.5 进程和线程 理解`fork()`, `exec...

Global site tag (gtag.js) - Google Analytics