尝试linux下c简单编程,从java到c真不习惯

本文介绍了在Linux环境下使用C语言进行编程的基本操作,包括获取用户信息、读取文件属性、创建临时文件及获取进程ID等常见任务的具体实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

打了打书上代码,感觉从java到linux上的c真的好不习惯...
以前也写过C++,不过没有感觉这么乱~~~~~~
.h库里的文件写的也太飘逸了吧,一个个宏,一个个看不到内部结构的方法
只是拿过来用用,看不到实现的方法,真是揪心阿.....
哎,甭管怎样,也是顺利写了几个小的程序,当个小笔记,供以后查阅吧~

1 linux上,获取登录用户的信息
在pwd.h中定义了口令数据库的结构passwd, 它包含了一些用户的信息.
unistd.h中getuid(void)方法可以获得用户的id

#include <sys/types.h>
#include 
<pwd.h>
#include 
<unistd.h>
#include 
<stdio.h>

int main(int argc, char **argv ){
  uid_t uid;
  gid_t gid;
  
struct passwd *pw;

  uid 
= getuid(  );
  gid 
= getgid(  );
  printf( 
"user id is:%d, group id is:%d ", uid, gid );   //如果用root登,打印出来的竟然是null, 奇怪ing

  pw 
= getpwuid( uid );
  printf( 
"user login name is:%s ", pw->pw_name );
  printf( 
"user uid is:%s ", pw->pw_uid );
  printf( 
"user gid is:%s ", pw->pw_gid );
  printf( 
"user login shell is:%s ", pw->pw_shell );

  
return 0;
}


2  文件信息读取
a.char *avgv[]中存放了运行时后续的参数
如./file "file"
那么argv[0]中存放的是"./file"
         argv[1]中方方的是"file"
b.stat.h中定义了struct stat
此程序用运用
int  lstat(const char *filename,  struct stat *buf );   来将buf赋值
#include <sys/types.h>
#include 
<sys/stat.h>
#include 
<stdio.h>

int main(int args, char *argv[  ]  ){
  
int i;
  
struct stat buf;
  printf(
"argv[0]%s argv[1]%s ",argv[0],argv[1]);
  
char *ptr;
  
if( argv<2 ){
    printf(
"Usage: ./file [filename] " );
    exit(
1); 
  }

  
if( lstat(argv[1], &buf)<0 ){
    perror( 
"lstat" );
    exit( 
1 );
  }

  
if( S_ISREG( buf.st_mode ) )
    ptr 
= "regular";
  
else if( S_ISDIR( buf.st_mode ) )
    ptr 
= "directory";
  
else ptr = "other mode";    //用的与操作此处我简写了,还有很多的状态,如S_IFLNK判度是否为符                                                    //号连接
  
  printf( 
"File %s is %s file ",argv[ 1 ],ptr );

  
if( S_ISREG( buf.st_mode ) )
    printf( 
"File size is %d bytes ",buf.st_size );
  
return 0;
}

3  新建临时文件
stdio.h中,linux下建立临时文件方法
char *tmpnam(char *s);
FILE *tmpfile(void);

#include <stdio.h>

int main( ){
  
char tmpname[ L_tmpnam ];
  
char *filename;
  FILE 
*fp;

  filename 
= tmpnam( tmpname );
  printf( 
"Temporary file name: %s ", filename );
  
  fp 
= tmpfile(  );
  
if( fp ){
    printf( 
"Temporary file opened. " );
  }

  
else
    perror( 
"tmpfile" );
  
return 0;
}



4  获取进程pid
getpid()为获取进程号
getppid()为获取父进程号
#include <stdio.h>
#include 
<unistd.h>
#include 
<stdlib.h>

int main(  ){
  printf( 
"PID = %d ", getpid(  ) );
  printf( 
"PPID = %d ", getppid(  ) );
  sleep( 
30 );
  exit( EXIT_SUCCESS );
}




[注:代码自《linux程序设计权威指南》]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值