basename()—众里寻他千百度,那人却在linux函数库

这是一桩因不熟悉linux函数引发的惨案:

我想在linux上用C借助socket实现一个文件传输的软件,输入文件的目录后将该文件从客户端发送到服务器,包括该文件的名称与内容。这就比较简单了,我可以用结构体,结构体的成员分别为文件的名称与文件的内容。

那么问题来了,该怎样从输入的文件目录中获取到该文件的名称呢?

我想要的效果是这样的:

          input the file directroy:

             /tmp/project/test/test.txt

            the file name is: test.txt     


  于是,我踏上了找寻能够从文件目录中获取文件名称的函数的不归之路。(我没有想着自己写函数,将输入的文件目录当作一个字符串然后解析。我觉得这样子实在是太麻烦。)

所以我在百度上输入这样的关键词:linux C socket 从文件目录中获取文件的名称得到下面的解决方案:

int stat(const char* file_name,struct stat *buf)

这个函数可以根据文件的路径取得该文件的状态,stat是个结构体,结构成员包含了各种文件的属性却独独没有,我想要的file_name。

于是,我继续找寻。

是跟目录相关的,opendir,readdir吗?不是!

有人告诉我可以通过读/proc/pid获取,这种方法我没有试。

最后,我发现一个致命的问题,我应该百度:从文件路径中读取文件名而不是文件目录

  皇天不负有心人人,我终于找到了!

        basename()

        basename是个shell命令也是linux自带的系统函数。

总结:

  一、对于linux函数库不了解,导致遇到问题时不知道用哪个函数去解决。

二、刚开始搜索函数的出发点就是错的,不应该是从文件目录中获取文件名,而应该是文件路径中获取文件名。否则无论如何是搜索不到basename()的。

   

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值