您的位置:首页 > 运维架构 > Linux

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

2008-04-09 13:34 204 查看
打了打书上代码,感觉从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程序设计权威指南》]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: