打了打书上代码,感觉从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程序设计权威指南》]
以前也写过C++,不过没有感觉这么乱~~~~~~
.h库里的文件写的也太飘逸了吧,一个个宏,一个个看不到内部结构的方法
只是拿过来用用,看不到实现的方法,真是揪心阿.....
哎,甭管怎样,也是顺利写了几个小的程序,当个小笔记,供以后查阅吧~
1 linux上,获取登录用户的信息
在pwd.h中定义了口令数据库的结构passwd, 它包含了一些用户的信息.
unistd.h中getuid(void)方法可以获得用户的id






















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赋值





























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


















4 获取进程pid
getpid()为获取进程号
getppid()为获取父进程号










[注:代码自《linux程序设计权威指南》]