前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux C/C++多进程同时写一个文件(三)

Linux C/C++多进程同时写一个文件(三)

作者头像
typecodes
发布2024-03-29 15:17:04
1840
发布2024-03-29 15:17:04
举报
文章被收录于专栏:typecodestypecodes

本文是这《Linux C/C++多进程同时写一个文件》系列文章的第三篇,上一篇文章演示了两个亲缘关系的进程(父子进程)同时写一个文件的情形,并得出了数据只会错乱但不会覆盖的结论。这篇文章主要是在第一篇文章的基础上,加上上篇文章的分析,更深下一步地探索两个非亲缘关系的进程同时写一个文件的问题。

1 查看要写入的文件的inode信息

使用stat LINUX_MUTIL_PROCESS_WRITE_2命令查看要写入的文件inode信息,可以看到它的值为67728087

执行两个测试程序
执行两个测试程序
2 示例程序

下面这个linux_process_fork1_7.c程序很简单,主要是把p_buf指向的静态区数据写入到文件LINUX_MUTIL_PROCESS_WRITE中。

为了测试多进程同时写文件的情景,需要复制linux_process_fork1_7.c程序为linux_process_fork1_8.c,同时把p_buf指向改成abcdefghi,然后分别编译成两个不同的可执行文件:linux_process_fork1_7 和 linux_process_fork1_8。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45

/** * @FileName linux_process_fork1_7.c * @Describe Linux C/C++多进程同时写一个文件(三) * @Author vfhky 2017-10-29 22:23 https://typecodes.com/cseries/linuxmutilprocesswrite3.html * @Compile gcc linux_process_fork1_7.c -o linux_process_fork1_7 */ #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <errno.h> #include "printnolog.h" #define FILE_NAME "LINUX_MUTIL_PROCESS_WRITE_2" static const char *p_buf = "123456789"; int main( const int argc, const char * const *argv ) { int i_fd = open( FILE_NAME, O_RDWR | O_CREAT ); if( -1 == i_fd ) { PRINTNOLOG( "Open file=%s failed, errno=%d errmsg=%s.\n", FILE_NAME, errno, strerror( errno ) ); return -1; } static int i_write_len = 0; for( int i=0; i<10000; i++ ) { //每次都偏移到文件最末尾 // if( 0 > lseek( i_fd, 0L, SEEK_END ) ) // { // PRINTNOLOG( "lseek error.\n" ); // return 0; // } usleep( 1000 ); i_write_len += write( i_fd, p_buf, strlen( p_buf ) ); } close( i_fd ); PRINTNOLOG( "i_write_len=%ld.\n", i_write_len ); return 0; }

3 开始测试

具体的测试过程和第一篇文章一样的:

Linux C/C++多进程同时写一个文件
Linux C/C++多进程同时写一个文件
Linux C/C++多进程同时写一个文件
Linux C/C++多进程同时写一个文件

这里只列出最后的测试结果:两个非亲缘进程分别写入了90000字节,但是文件总共大小还是90000字节。

Linux C/C++多进程同时写一个文件
Linux C/C++多进程同时写一个文件
4 结论

从测试结果可以得出:两个非亲缘关系的进程同时写一个文件时,如果没有设置append同步文件偏移量,那么两个进程写入的数据会出现覆盖的情况。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-10-29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 查看要写入的文件的inode信息
  • 2 示例程序
  • 3 开始测试
  • 4 结论
相关产品与服务
腾讯云服务器利旧
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档