滁州网站定制,网站登录失败怎么回事,设计公司官网网页,橙光游戏制作器手机版//-I意为include 指定头文件搜索路径 -l#xff1a;告诉编译器链接时需要的库
gcc *.c -I /usr/include/fastdfs/ -I /usr/include/fastcommon/ -l fdfsclient//调试gcc -g -rdynamic main.c如何解决 “ 段错误(吐核) ” #xff1f;#xff1f;#xff1f; 【线上排错】记…//-I意为include 指定头文件搜索路径 -l告诉编译器链接时需要的库
gcc *.c -I /usr/include/fastdfs/ -I /usr/include/fastcommon/ -l fdfsclient//调试gcc -g -rdynamic main.c如何解决 “ 段错误(吐核) ” 【线上排错】记一次Linux的“段错误(吐核)”排查步骤 Centos 开始Core调试 [Linux] 什么是 段错误吐核 Linux环境下段错误的产生原因及调试方法小结
跟着视频操作运行代码出现
[fishlocalhost mytest]$ ./a.out
段错误(吐核)参考了上述连接不断调试并且反复校对代码和视频以及资料中的差别无果 最后得到的调试信息是
(gdb) run
Starting program: /home/fish/mytest/./a.out
[Thread debugging using libthread_db enabled]
Using host libthread_db library /lib64/libthread_db.so.1.Program received signal SIGSEGV, Segmentation fault.
0x00007ffff7874a4a in __GI__IO_str_overflow (fp0x7fffffffd2c0, c91) at strops.c:133
133 *fp-_IO_write_ptr (unsigned char) c;个人感觉是哪个地方的读写出了问题导致内存访问溢出了之类的但是没找到具体是哪个语句的调用出了问题。先记一下后续有时间再调。要是有知道哪儿出问题的大佬请不吝赐教 对应调用出错位置代码
(gdb) l
128 fp-_IO_write_end fp-_IO_buf_end;
129 }
130 }
131
132 if (!flush_only)
133 *fp-_IO_write_ptr (unsigned char) c;
134 if (fp-_IO_write_ptr fp-_IO_read_end)
135 fp-_IO_read_end fp-_IO_write_ptr;
136 return c;
137 }
(gdb) l
138 libc_hidden_def (_IO_str_overflow)
139
140 int
141 _IO_str_underflow (_IO_FILE *fp)
142 {
143 if (fp-_IO_write_ptr fp-_IO_read_end)
144 fp-_IO_read_end fp-_IO_write_ptr;
145 if ((fp-_flags _IO_TIED_PUT_GET) (fp-_flags _IO_CURRENTLY_PUTTING))
146 {
147 fp-_flags ~_IO_CURRENTLY_PUTTING;
贴下源码 main.c
#include stdio.h
#include unistd.h
#include pthread.h
#include stdlib.h
#include sys/types.h
#include sys/stat.h
#include string.h
#include fdfs_upload_file.hint main(int argc,const char* argv[]){char fileID[1024] {0};upload_file1(/etc/fdfs/client.conf,main.c,fileID);printf(fileID:%s\n,fileID);printf(\n);upload_file2(/etc/fdfs/client.conf,main.c,fileID,sizeof(fileID));printf(fileID:%s\n,fileID);return 0;
}
fdfs_upload_file.h
#ifndef _FDFS_UPLOAD_FILE_H
#define _FDFS_UPLOAD_FILE_Hint upload_file1(const char* confFile, const char* localFile, char* fileID);
int upload_file2(const char* confFile, const char* localFile, char* fileID, int bufLen);#endif
fdfs_upload_file.c
#include stdio.h
#include stdlib.h
#include string.h
#include errno.h
#include sys/types.h
#include sys/stat.h
#include fcntl.h
#include sys/wait.h
#include fdfs_client.h
#include fdfs_upload_file.hint upload_file1(const char* confFile,const char* localFile,char* fileID)
{char group_name[FDFS_GROUP_NAME_MAX_LEN 1];ConnectionInfo *pTrackerServer;int result;int store_path_index;ConnectionInfo storageServer;if ((resultfdfs_client_init(confFile)) ! 0){return result;}pTrackerServer tracker_get_connection();if (pTrackerServer NULL){fdfs_client_destroy();return errno ! 0 ? errno : ECONNREFUSED;}*group_name \0;if ((resulttracker_query_storage_store(pTrackerServer, \storageServer, group_name, store_path_index)) ! 0){fdfs_client_destroy();fprintf(stderr, tracker_query_storage fail, \error no: %d, error info: %s\n, \result, STRERROR(result));return result;}result storage_upload_by_filename1(pTrackerServer, \storageServer, store_path_index, \localFile, NULL, \NULL, 0, group_name, fileID);if (result 0){printf(%s\n, fileID);}else{fprintf(stderr, upload file fail, \error no: %d, error info: %s\n, \result, STRERROR(result));}tracker_disconnect_server_ex(pTrackerServer, true);fdfs_client_destroy();return result;
}//多进程实现
int upload_file2(const char* confFile,const char* localFile,char* fileID,int bufLen){//创建管道int fd[2];int retpipe(fd);if(ret-1){perror(pipe reeor);exit(0);}//创建子进程pid_t pid fork();//如果是子进程if(pid0){//3.标准输出重定向 -》管道的写端dup2(fd[1],STDOUT_FILENO);//4.关闭读端close(fd[0]);//5。执行execlp命令execlp(fdfs_upload_file,xxx,confFile, localFile, NULL);perror(execlp error);}else{//父进程读管道//关闭写端close(fd[1]);read(fd[0],fileID,bufLen);//回收pcb-》子进程wait(NULL);}
}